如何从NodeJS中的jquery接收post数据

时间:2017-04-12 18:56:00

标签: javascript jquery node.js

这是我的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中完成吗?

3 个答案:

答案 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;
});

https://expressjs.com/en/api.html#req.body

答案 2 :(得分:0)

我找到了解决方案,感谢Christian。

我需要实现以下代码:

app.use(bodyParser.urlencoded({ extended: true }));

但为什么?