3

我刚刚安装了最新版本的模块。我无法获得任何 GET 或 POST 变量。我做错了什么?节点:v0.12.2

var express        =         require("express");
var bodyParser     =         require("body-parser");
var app            =         express();
app.use(bodyParser.urlencoded({ extended: false }))

// parse application/json
app.use(bodyParser.json())

app.use(function (req, res) {
    res.setHeader('Content-Type', 'text/plain')
    res.write('you posted:\n')
    res.end(JSON.stringify(req.body, null, 2))
});
app.listen(3000,function(){
    console.log("Started on PORT 3000");
})

http://localhost:3000/?token=devvvvv GET 返回:您发布:{}

感谢您的回答,但 POST 的问题没有解决... http://localhost:3000/上的 POST token=as123ds 在req.body 中返回空数组 我该如何解决这个问题?

4

5 回答 5

6

您正在通过查询字符串提交参数并尝试通过请求正文访问它们,在这种情况下空。

token 参数将在 request.query 中可用,如下所示:

app.use(function (req, res) {
  res.setHeader('Content-Type', 'text/plain')
  res.write('you posted:\n')
  res.end(JSON.stringify(req.query.token, null, 2))
});

如果您只打算在查询字符串中提交参数,则根本不需要安装 body-parser 中间件。

于 2015-04-20T12:54:07.737 回答
1

您应该使用 req.query:

req.query

包含路由中每个查询字符串参数的属性的对象。如果没有查询字符串,则为空对象 {}。

api链接

于 2015-04-20T12:52:47.030 回答
1

您正在从请求中解析 JSON,因此来自客户端的 POST 必须包含'Content-Type': 'application/json'在 HTTP 标头中。如果没有,您将request.body在服务器端有空。

于 2017-02-20T07:04:53.490 回答
0

bodyparser 模块要求 http 请求的“Content-type”属性等于“application/json”。它不适用于其他值。

于 2015-04-20T14:27:52.607 回答
0

您必须检查客户端中的请求内容类型,此链接可能会有所帮助

节点(Express)请求正文为空

这是因为 bodyParser 会解析 application/json、application/x-www-form-encoded 和 multipart/form-data,它会根据 Content-Type 选择使用哪个解析器。

于 2016-10-07T19:30:39.647 回答