ошибка при отправке запроса на nodejs whit Express с использованием postman?

#node.js #json #express #post #postman

#node.js #json #экспресс #Публикация #почтальон

Вопрос:

Я пытаюсь вставить данные в таблицу MySQL с помощью NodeJS, экспресс-фреймворк выбрасывает Postman с помощью метода POST. Я получаю сообщение об ошибке. Я не знаю, связано ли это с синтаксическим анализом json. или я должен отправить его по-другому.

Json, отправленный из postman (raw, JSON):

 {
    "namel": "Teusaquillo",
    "area_2m": 6000,
    "parent": "chapinero"
}
  

Когда я отправляю запрос, я получаю эту ошибку:

 <pre>SyntaxError: Unexpected token   in JSON at position 3<br> amp;nbsp; amp;nbsp;at JSON.parse (amp;<anonymousamp;>)<br> amp;nbsp; amp;nbsp;at parse (<mypaht>nodeapinode_modulesbody-parserlibtypesjson.js:89:19)<br> amp;nbsp; amp;nbsp;at <mypaht>node_modulesbody-parserlibread.js:121:18<br> amp;nbsp; amp;nbsp;at invokeCallback (<mypaht>nodeapinode_modulesraw-bodyindex.js:224:16)<br> amp;nbsp; amp;nbsp;at done (<mypaht>node_modulesraw-bodyindex.js:213:7)<br> amp;nbsp; amp;nbsp;at IncomingMessage.onEnd (<mypaht>node_modulesraw-bodyindex.js:273:7)<br> amp;nbsp; amp;nbsp;at IncomingMessage.emit (events.js:326:22)<br> amp;nbsp; amp;nbsp;at endReadableNT (_stream_readable.js:1252:12)<br> amp;nbsp`; amp;nbsp;at processTicksAndRejections (internal/process/task_queues.js:80:21)</pre>
  

Другой вид ошибки:

 SyntaxError: Unexpected token   in JSON at position 3
    at JSON.parse (<anonymous>)
    at parse (<mypaht>node_modulesbody-parserlibtypesjson.js:89:19)
    at <mypaht>node_modulesbody-parserlibread.js:121:18
    at invokeCallback (<mypaht>node_modulesraw-bodyindex.js:224:16)
    at done (<mypaht>node_modulesraw-bodyindex.js:213:7)
    at IncomingMessage.onEnd (<mypaht>node_modulesraw-bodyindex.js:273:7)
    at IncomingMessage.emit (events.js:326:22)
    at endReadableNT (_stream_readable.js:1252:12)
    at processTicksAndRejections (internal/process/task_queues.js:80:21)
  

Это index.js файл:

 const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const mysql = require('mysql');
 
app.use(bodyParser.json());
 
//create database connection
const conn = mysql.createConnection({
  ...
});
 
//connect to database
conn.connect((err) =>{
  ...
});     

app.post('/api/locations',(req, res) => {
  let data = {namel: req.body.namel, area_2m: req.body.area_2m, parent: req.body.parent};  
  let sql = "INSERT INTO location SET ?";
  let query = conn.query(sql, data,(err, results) => {
    if(err) throw err;
    res.send(JSON.stringify({"status": 200, "error": null, "response": results}));
  });
});
  

Это таблица, которую я пытаюсь заполнить:

 CREATE TABLE `location` (
  `namel` char(100) NOT NULL,
  `area_2m` int(11) DEFAULT NULL,
  `parent` char(100) DEFAULT NULL,
  PRIMARY KEY (`namel`),
  KEY `parent` (`parent`),
  CONSTRAINT `location_ibfk_1` FOREIGN KEY (`parent`) REFERENCES `location` (`namel`)
) 
  

Я буду признателен за вашу помощь. Спасибо!

Комментарии:

1. Вы пытались отправить запрос в других инструментах? Например, бессонница. Просто чтобы исключить влияние инструмента.

2. Вы решили свою проблему?

3. В Insomnia я получаю эту ошибку. Ошибка синтаксиса: неожиданный токен в JSON в позиции 2 в JSON.parse (<анонимный>)

4. @JRichardsz еще нет. я выполнил отладку, и ошибка перед вводом в функцию

5. Не могли бы вы попробовать с этим curl -d '{"key1":"value1", "key2":"value2"}' -H "Content-Type: application/json" -X POST http://localhost:3000/data ??

Ответ №1:

В postman убедитесь, что вы выбрали JSON (application / json)введите описание изображения здесь

Ответ №2:

Данные, передаваемые по запросу, должны быть массивом?

 const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const mysql = require('mysql');
 
app.use(bodyParser.json());
 
//create database connection
const conn = mysql.createConnection({
  ...
});
 
//connect to database
conn.connect((err) =>{
  ...
});     

app.post('/api/locations',(req, res) => {
  // use destruction for easy reading
  let { namel, area_2m, parent } = req.body;
  // use mysql format to build query
  let sql = "INSERT INTO location SET ?";
  let value = [namel, area_2m, parent]
  let queryString = mysl.format(sql, value)
  let query = conn.query(queryString,(err, results) => {
    if(err) throw err;
    res.send(JSON.stringify({"status": 200, "error": null, "response": results}));
  });
});
  

Ответ №3:

В моем случае это произошло из-за дополнительного пробела. Как только я избавился от всех лишних пробелов между свойствами и между открывающей скобкой и первым ключом / свойством, это сработало.

Я запускаю NodeJS с помощью express, и я предполагаю express.json , что выдает ошибку вместо удаления дополнительных пробелов, хотя дополнительные пробелы в json являются совершенно допустимыми json.