Rest API: вставка значения в базу данных MySQL с помощью ExpressJS

0

У меня этот простой 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

  • 0
    Я ценю вашу помощь, но я пробую много комбинаций, и там сказано: «У вас ошибка в синтаксисе SQL». Этот синтаксис не работает "INSERT INTO users, [postData.id, postData.userid и т. Д.] VALUES [NULL, '?', '?', ...]. Не могли бы вы уточнить, что я должен поставить между Марк. Спасибо
  • 0
    Посмотрите на примеры из библиотеки (они не добавляют кавычки вокруг? И они также передают массив в качестве второго аргумента, а не объект, то есть то, что я пытался сказать)
Показать ещё 1 комментарий
Теги:
express
rest

2 ответа

0
Лучший ответ

кажется, вам не хватает части анализатора тела, которая анализирует данные 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));
  });
});

Надеюсь, он сработает.

  • 0
    Привет Дипак, все работает отлично. Извините за поздний ответ, когда я только что вернулся из школы.
0

Поскольку знак вопроса (?) Заключен в одинарные кавычки, его считают строкой, поэтому знак вопроса (?) Хранится в вашей базе данных. Проверьте этот следующий подход, вставив строки с первичным ключом 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));
  });
});
  • 0
    Привет, он сказал "У вас есть ошибка в вашем синтаксисе SQL"
  • 0
    Можете ли вы удалить поле made_at при выполнении пост-запроса, и дайте мне знать. В случае ошибки, пожалуйста, поделитесь им с полной трассировкой.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню