У меня этот простой API для базы данных MySQL работает на ExpressJS.
const express = require('express');
const router = express.Router();
const app = express();
const port = process.env.PORT || 5000;
app.listen(port, () => console.log('Listening on port ${port}'));
var mysql = require('mysql')
var connection = mysql.createConnection({
host: 'localhost',
user: 'andri',
password: '12345',
database: 'andri'
});
app.get('/employees', function (req, res) {
console.log(req);
connection.query('select * from users', function (error, results, fields) {
if (error) throw error;
res.end(JSON.stringify(results));
});
});
app.get('/employees/:id', function (req, res) {
connection.query('select * from users where id=?', [req.params.id], function (error, results, fields) {
if (error) throw error;
res.end(JSON.stringify(results));
});
});
app.post('/employees', function (req, res) {
var postData = req.body;
connection.query("INSERT INTO users ('id', 'userid', 'fullname', 'usergroup', 'emailid', 'mobile', 'title', 'created_at') VALUES (NULL, '?', '?', '?', '?', '?', '?', CURRENT_TIMESTAMP);",
postData, function (error, results, fields) {
if (error) throw error;
res.end(JSON.stringify(results));
});
});
Я могу проверить, используя POSTMAN, что функция GET (как сотрудников, так и сотрудников /: id) работает нормально. Но функция POST
{
"userid": "PROJ-12345",
"fullname": "Eko Andri S",
"usergroup": "IT",
"emailid": "[email protected]",
"mobile": "0811111111",
"title": "Intern",
"created_at": "2018-05-30T01:59:17.000Z"
}
получить этот результат на POTSMAN:
{
"fieldCount": 0,
"affectedRows": 1,
"insertId": 8,
"serverStatus": 2,
"warningCount": 0,
"message": "",
"protocol41": true,
"changedRows": 0
}
Вышеуказанные записи успешно записаны в базе данных, но значение для каждого поля - "?" без цитаты; за исключением отметки времени, которая записана правильно.
Если я удалю цитату для? в строке INSERT, я получаю следующую ошибку
У вас есть ошибка в синтаксисе SQL
кажется, вам не хватает части анализатора тела, которая анализирует данные JSON, буфера, строки и URL-адреса, переданные с использованием HTTP POST-запроса. Вы можете найти более подробную информацию о body-parser здесь
Добавьте ниже код в свой код и убедитесь, что вы установили body-parser.
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
Затем в вашей части app.post
app.post('/employees', function (req, res) {
var postData = req.body;
postData.created_at = new Date();
connection.query("INSERT INTO users SET ?",
postData, function (error, results, fields) {
if (error) throw error;
console.log(results.insertId); // Auto increment id
res.end(JSON.stringify(results));
});
});
Надеюсь, он сработает.
Поскольку знак вопроса (?) Заключен в одинарные кавычки, его считают строкой, поэтому знак вопроса (?) Хранится в вашей базе данных. Проверьте этот следующий подход, вставив строки с первичным ключом Auto increment.
app.post('/employees', function (req, res) {
var postData = req.body;
connection.query("INSERT INTO users SET ?",
postData, function (error, results, fields) {
if (error) throw error;
console.log(results.insertId); // Auto increment id
res.end(JSON.stringify(results));
});
});