在快速POST呼叫中,req.body是空的

时间:2017-09-22 06:35:40

标签: javascript node.js

我正在尝试在快递中写一个示例POST调用。

var express     = require("express")
    , app       = express()
    , server    = require('http').createServer(app)
    , bodyParser = require('body-parser');

app.listen(80, function() {
   console.log("server started"); 
});

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

app.post("/test", function(req, res) {
    try {
        console.log(req.body);
        res.send("working " + req.body.name); 
    } catch(e) {
        console.log("error in test API" + e.message);
        res.end();
    }
});

但我无法访问服务器上的正文数据。它是空的。以下是邮递员查询。

enter image description here

2 个答案:

答案 0 :(得分:2)

如果你想要JSON数据,请在Postman中选择raw in body,而不是form-data。

然后以JSON格式输入数据。如果您设置了标题,邮递员应格式化它:Content-Type: application/json

修改

如果要解析表单数据,则无法使用自述文件中所述的正文解析器:

由于它们复杂且通常较大,因此不能处理多部分主体。对于多部分机构,您可能对以下模块感兴趣:

  • busboy and connect-busboy
  • multiparty和connect-multiparty
  • 强大
  • multer

Github link

答案 1 :(得分:1)

作为req.body读取你错过了Content-Type:application / json标题我认为,添加它并将请求发送到原始json。或者你得到一个字符串,不能直接访问它作为req.body

例如:

```{r, results='asis'} knitr::kable(sjt.df(efc, no.output=TRUE)$knitr, format = "rst") ```

更新:

如果您需要表单数据,请使用bodyParser将文本转换为json

{"name" : "abcd"}

更新2:

似乎问题在于你正在使用的multipart / form-data。要处理它,由于安全问题,您需要一个特定的框架,如multer。以下应该有效。

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