这是我的jQuery代码:
$.ajax({
url: 'http://localhost:3000/generatePDF',
data: '{"data": "TEST"}', /* It is about the content "TEST" that I would like to receive/get */
type: 'POST',
success: function (data) {
console.log('Success: ');
},
error: function (xhr, status, error) {
console.log('Error: ' + error.message);
}
});
这是我的NodeJS服务器中的代码:
app.post("/generatePDF", function (req, res) {
console.log(req);
res.sendStatus(200);
return;
});
我想收到我用jQuery代码发送的POST数据。我怎样才能做到这一点?或者我可以在普通的Javascript中完成吗?
答案 0 :(得分:1)
最简单的方法是使用Express服务器和正文解析器https://github.com/expressjs/body-parser。
这样你的NodeJS服务器可以看起来像这样;
var express = require("express");
var bodyParser = require("body-parser");
var app = express();
var PORT = process.env.PORT || 3001;
app.use(bodyParser.json());
app.post("/generatePDF", function (req, res) {
console.log(req.body);
res.json({
status: 'OK'
})
});
app.listen(PORT, () => {
console.log("Server running at http://localhost:" + PORT);
});
curl 的结果是;
$ curl -X POST "http://localhost:3001/generatePDF" -H "Content-Type: application/json" --data '{"data": "TEST"}'
{"status":"OK"}
NodeJS服务器日志;
$ node server.js
Server running at http://localhost:3001
{ data: 'TEST' }
请确保使用POST向API发送 Content-Type:application / json 标头。
您可以通过在$ .ajax选项对象中添加新密钥来为调用添加标头;
$.ajax({
headers: { 'Content-Type': 'application/json' }
});
答案 1 :(得分:0)
如果您使用快递,则需要req.body
:
app.post("/generatePDF", function (req, res) {
console.log(req.body);
res.sendStatus(200);
return;
});
答案 2 :(得分:0)
我找到了解决方案,感谢Christian。
我需要实现以下代码:
app.use(bodyParser.urlencoded({ extended: true }));
但为什么?