我正在尝试通过 NodeJS 和 Express 创建简单的 REST API,一切正常,但无法将 JSON 数据发布到 API。body-parser 无法解析 JSON 数据
curl -XPOST -H "Content-type: application/json" 127.0.0.1:3000/contact -d "{'name':'Mazhar'}"
这是代码
const express = require("express");
const bodyParser = require("body-parser");
const app = express();
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());
app.post('/contact', (req, res) => {
let body = req.body;
console.log(body);
body.message = "Hello " + body.name;
res.send(body);
});
app.listen(3000, () => {
console.log("Server is listening on 3000");
});
这是错误,无论我如何更改 JSON 正文,它总是一个错误,我也尝试输入双引号,并且任何单引号或双引号总是有错误,根据我的理解,应用程序无法解析json数据。
SyntaxError: Unexpected token ' in JSON at position 0
at JSON.parse (<anonymous>)
at createStrictSyntaxError (E:\ws-js\nodejs\web-server\node_modules\body-parser\lib\types\json.js:158:10)
at parse (E:\ws-js\nodejs\web-server\node_modules\body-parser\lib\types\json.js:83:15)
at E:\ws-js\nodejs\web-server\node_modules\body-parser\lib\read.js:121:18
at invokeCallback (E:\ws-js\nodejs\web-server\node_modules\raw-body\index.js:224:16)
at done (E:\ws-js\nodejs\web-server\node_modules\raw-body\index.js:213:7)
at IncomingMessage.onEnd (E:\ws-js\nodejs\web-server\node_modules\raw-body\index.js:273:7)
at IncomingMessage.emit (events.js:203:15)
at endReadableNT (_stream_readable.js:1145:12)
at process._tickCallback (internal/process/next_tick.js:63:19)
解决方案
好吧,在应用了多种技术之后,我终于意识到在这种特殊情况下,单引号根本不起作用,唯一对我有用的解决方案是由@AfridaAnzum 提供的。
每件事都应该用双引号括起来,所有属性和值也应该用转义的双引号 "{\"key\":\"value\"}"
我猜这是一个写得很糟糕的库,它无法处理带单引号或不带引号的键。