快递js - 请求正文为空

时间:2015-04-20 12:48:03

标签: javascript node.js express body-parser

我刚刚安装了最新版本的模块。我无法获得任何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中返回空数组 我该如何解决这个问题?

5 个答案:

答案 0 :(得分: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))
});

如果您只打算在查询字符串中提交参数,则根本不需要安装正文解析器中间件。

答案 1 :(得分:1)

你应该使用req.query:

req.query

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

api link

答案 2 :(得分:0)

bodyparser模块需要http请求"内容类型"属性等于" application / json"。它不会为其他价值观而努力。

答案 3 :(得分:0)

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

Node (Express) request body empty

  

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

答案 4 :(得分:0)

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