【问题标题】:Parse body from GET request using nodejs, express, body-parser?使用nodejs,express,body-parser从GET请求中解析body?
【发布时间】:2016-07-25 07:45:19
【问题描述】:

是否可以使用express 检索body 的内容?

我开始尝试body-parser,但这似乎不适用于GET。有没有可以工作的模块?

var express = require('express'),
  bodyParser = require('body-parser'),
  PORT = process.env.PORT || 4101,
  app = express();

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

app.route('/')
  .get(function(req, res) {
    respond(req, res, 'GET body contents:\n');
  })
  .post(function(req, res) {
    respond(req, res, 'POST body contents:\n');
  });

app.listen(PORT, function(err) {
  if (err) {
    console.log('err on startup ' + err);
    return;
  }
  console.log('Server listening on port ' + PORT);
});

/*
 * Send a response back to client
 */
function respond(req, res, msg){
  res.setHeader('Content-Type', 'text/plain');
  res.write(msg);
  res.end(JSON.stringify(req.body, null, 2));
}

这是GET的回复:

GET body contents:
{}

来自POST

POST body contents:
{
    "gggg": ""
}

【问题讨论】:

  • Primo,GET 请求没有正文
  • GET 请求没有正文。请改用 POST。
  • @bigdestroyer GET 请求确实允许正文
  • @bobbyrne01 虽然 GET 可以有一个主体,但根据 HTTP 规范,服务器应该忽略它,因为它没有任何意义。见this answer。服务器将如何处理所有这些 UUID?很可能需要以不同的方式构建应用程序,超长 URL 不太可能是适合这项工作的工具...

标签: node.js express body-parser


【解决方案1】:

GET 请求没有正文,它们有查询字符串。为了在 expressJS 中访问查询字符串,您应该使用 req.query 对象。

res.end(JSON.stringify(req.query, null, 2));

【讨论】:

  • 问题是,我希望用户在GET 请求正文中提交uuids 的列表。我将在数据库中查找这些uuids。可能有数百个uuids 传递,这些都应该放入query 字符串吗?
  • @bobbyrne01 那你为什么不能使用 POST 请求呢?查询字符串的长度有限制,但相当大
  • 我可以使用POST,但我试图尽可能保持 RESTful。我知道长度的限制很大,但我有可能达到它。
  • 这完全取决于架构和要求。例如,您可以限制一个批次中可以处理的项目数量,或者您可以使整个过程异步,您可以在其中发布批次,然后检查批次的状态
  • @bobbyrne01 如果您想保持 RESTful,请使用 GET 标头。它们达到与 POST (etc) body 相同的效果。看看owasp.org/index.php/…
猜你喜欢
  • 1970-01-01
  • 2016-10-14
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多