Nodejs)发布请求的主体似乎很奇怪

时间:2018-06-27 09:43:33

标签: node.js express angular5

我想发送服务器的x-www-form-urlencoded请求。我给它提供了一个json值,例如{username:'asd',password:'12345'}。

角度:

...
        let headers: HttpHeaders = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');
        this._http.post('/api/authentication', form.value, {headers: headers, observe: 'response'}).subscribe((response:HttpResponse<Object>) => {
          console.log(response); // response body {'{"username":"asd","password":"12345"}' : ""}
        });
...

所以我从后端得到一些奇怪的东西,而且我不太了解在实现中要进行哪些更改以使其像他得到的输入一样起作用。

Nodejs(快速表达):

//server.js
...
const bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true}));
...

-

//api/.../authentication.js
...
router.post('/', (req, res) => {
    let post  = req.body;

    console.log( req.body); //same strange hash: {'{"username":"asd","password":"12345"}' : ""}

    res.status(201).json(req.body);
});
...

1 个答案:

答案 0 :(得分:0)

Http标头application/x-www-form-urlencoded意味着向服务器发送x-www-form-urlencoded request,这是正确的。

但是,bodyParser.json 仅解析请求类型application/json(默认值)。

  

返回仅解析json并且仅查看Content-Type标头与type选项匹配的请求的中间件。键入默认为application / json。

所以这是不正确的。

您应该发送application/json请求。 或者,您应该将其解析为application/x-www-form-urlencoded,然后解码内容(json)。