Express js - 请求体为空。

3

我刚刚安装了最新版本的模块,但是无法获取任何GET或POST变量。我做错了什么吗?NODE版本为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返回空数组。 我该如何解决?


您应该使用仅一个登录,而不是两个登录,并使用该登录来编辑您的问题... - Taifun
5个回答

6
你正在通过查询字符串提交参数,并尝试通过请求正文访问它们,但在此情况下请求正文为空。
像这样,令牌参数将在请求查询中可用:
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 中间件。

1
您应该使用req.query:
req.query

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

API链接


2
如果路由设置如下:http://localhost:3000/:token,并像这样访问:http://localhost:3000/devvvvv,那么就会出现这种情况。 - nordhagen

1
您正在从请求中解析JSON,因此客户端的POST请求必须在HTTP头中具有'Content-Type': 'application/json'。否则,在服务器端将得到空的request.body

谢谢。这帮了我很多。 - Matt

0

bodyparser 模块需要 HTTP 请求的 "Content-type" 属性等于 "application/json"。其他值将不起作用。


0

你需要在客户端检查请求的内容类型,这个链接可能会有所帮助

Node (Express) 请求体为空

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


在您的答案中包含那个链接的重要细节可能是一个好主意,因为随着时间的推移,链接可能会失效,如果/当这种情况发生时,您的答案的意义可能完全丧失。 - orangething

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接