Это мой html файл
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Node delivered HTML </title>
</head>
<body>
<div>
<h1>Send JSON to Node</h1>
<button onClick="sendJSON()">Send</button>
<p id ="result"></p>
</div>
<script>
var myData = [
{
"author": "Bill",
"title": "Chris",
"genre": "Chrisdss",
"price": 20
},
{
"author": "Bill",
"title": "Chrisss",
"genre": "Chrdsdss",
"price": 24
}
]
function sendJSON(){
console.log(myData);
var xmlhttp = new XMLHttpRequest(); // new HttpRequest instance
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("result").innerHTML =
this.responseText;
}
};
xmlhttp.open("POST", "http://localhost:3000");
xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
xmlhttp.send(JSON.stringify(myData));
}
</script>
</body>
</html>
И это мой файл server.js
const express = require('express')
const bodyParser = require('body-parser')
const mysql = require('mysql');
const path = require('path')
const app = express()
var TABLE = 'table';
var books =[]
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "0december"
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
});
app.get('/', function(req, res) {
res.sendFile(path.join(__dirname+ '/frontend.html'));
});
app.post('/', function(req, res) {
var jsondata = req.body;
var values = [];
console.log(req.body);
for(var i=0; i< jsondata.length; i++){
values.push([jsondata[i].author,jsondata[i].title,,jsondata[i].genre,,jsondata[i].price]);
}
//Bulk insert using nested array [ [a,b],[c,d] ] will be flattened to (a,b),(c,d)
con.query('INSERT INTO table (author,title,genre,price) VALUES ?', [values], function(err,result) {
if(err) {
res.send('Error');
console.log(err);
}
else {
res.send('Success');
}
});
});
app.listen(3000, () => console.log('Books API listening on port 3000'))
Мой сервер работает отлично, но я пробовал много вещей, и я получаю синтаксическую ошибку SQL. Я также попробовал учебник W3C, но у меня все еще была такая же ошибка. Может быть, потому что мой db изменен неправильно?
Моя модель называется table и содержит id, author, title, genre, price id - auto-increment, все - строка, кроме цены, которая является типом float. Почему я получаю синтаксическую ошибку, хотя мой синтаксис точно такой же, как и в учебниках?
EDIT: Ошибка sqlMessage: "У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с таблицей (автор, название, жанр, цена). VALUES ("Билл", "Крис", "NULL", "Chrisdss"), NULL\'в строке 1', sqlState: '42000', index: 0, sql: 'INSERT INTO table (автор, название, жанр, цена) VALUES (\' Bill\', \' Chris\', NULL, "Chrisdss", NULL, 20), ("Билл", "Chrisss", NULL, "Chrdsdss", NULL, 24.1) '}
Для запроса con.query('INSERT...?', [values],...
для работы значения должны содержать массивы длиной 4, содержащие значения автора, названия, жанра, цены.
Однако значения содержат массивы длиной 6.
Вы должны удалить нули из массивов внутри значений, заменив
values.push([jsondata[i].author,jsondata[i].title,,jsondata[i].genre,,jsondata[i].price]);
с
values.push([jsondata[i].author,jsondata[i].title,jsondata[i].genre,jsondata[i].price]);
Теперь значения содержат массивы длиной 4, а объемная вставка должна работать.
Если нули предназначены, вы должны указать, где они должны быть вставлены.
+ Изменить
'INSERT INTO table (author,title,genre,price) VALUES ?'
в
'INSERT INTO table (author,title,null_field_1,genre,null_field_2,price) VALUES ?'
где null_field_i - это поле, которое вы хотите заполнить нулем.
table
- плохой выбор имени для таблицы, потому что это зарезервированное слово. Вы должны попытаться изменить имя таблицы или обернуть его в обратные пометки в вашем запросе, что-то вроде этого.INSERT INTO `table` (aut...