【问题标题】:How to print the response body (or the request body when POST) in Node.js using Express?如何使用 Express 在 Node.js 中打印响应正文(或 POST 时的请求正文)?
【发布时间】:2017-08-18 09:48:56
【问题描述】:
var express = require('express');
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
mongoose.Promise = require('bluebird');


mongoose.connect("mongodb://localhost/placement-process");

var app = express();

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

var router = require('./router');
app.use('/api', router);

router.get('/companies', function(req, res){
    console.log(res.body);
});


app.listen(3000);

我正在使用 POSTMAN for Chrome 浏览器向 /api/companies 发出 GET 请求。但是我的控制台中没有任何输出。我究竟做错了什么?或者你会怎么做?

【问题讨论】:

  • 对于GET 请求,您期望req.body 是什么?
  • @robertklep 我想打印从我的 GET 请求返回的 JSON 对象。例如,[{ "_id" : ---some value----, "car" : "Porsche", "model": "Cayman" } ]
  • 这不是 Express 提供的开箱即用的东西,你需要一个特定的中间件来实现它(如express-interceptorexpress-mungexpress-buffer-response)。
  • 哦,好的。谢谢。我正忙着用另一种方式去做。我实际上需要验证,几个小时后我才发现验证这个词。

标签: javascript node.js express mongoose


【解决方案1】:

在你正在做的代码中

router.get('/companies', function(req, res){
  console.log(res.body);
});

应该是这样的

router.get('/companies', function(req, res){
  console.log(req.body); // req, not res altough it shouldn't be set for GET
});

您想打印请求正文而不是响应(当然,这是未设置的)。 让我知道它是否解决了您的问题。

[编辑]

既然您问我该怎么做,您可能应该注意,使用console.log 不是我在生产中记录某些内容的方式。相反,我会使用像 bunyan 这样的日志库,它是可扩展的,并且具有仅 json 的日志记录。我喜欢他们的愿景,即日志应该用于机器而不是人类,顺便说一下,他们还提供了一个二进制工具,可以以更人性化的格式漂亮地打印 JSON。它是可扩展的,您可以找到很多插件(称为“流”),如果您需要这种功能,它们还会记录到日志聚合器和第三方服务。

嗯,当然还有很多其他有效的替代品out there

[根据 OP 评论更新]

我想我现在明白你想要达到的目标了。 你应该看看实际上已经生成的after 响应。在您尝试打印甚至没有触及响应对象的地方,因此不应对其进行修改(除非您有一些中间件为您执行此操作-例如放置一些标头-)。 参考 on-finished 之类的库,您将在将其发送给客户端之前立即获得响应对象。

您没有明确说明您的expressnode 版本,所以我只能猜测,但试一试。

你也可以使用普通的 node.js APIs

您也可以在您的处理程序之后放置另一个中间件,然后将请求与响应集一起传递到它旁边,然后记录(快速路由器是基于堆栈的,因此除非您终止请求,否则您可以在多个处理程序中传递) .

顺便说一句,我只想试试我们的 Node.js API 或我发布给你的库。

如果我明白你的意思,请告诉我。

【讨论】:

  • req.body 不起作用。我需要打印返回的 JSON 对象。实际上,我需要运行验证器,但是一旦我得到 JSON 对象,我想我稍后会弄清楚那部分。 @LexAgosto
  • 我只需要打印我要发布的 JSON 对象。我不确定你建议的方法。 stackoverflow.com/questions/8742982/…这是我的问题,但它对我不起作用。 @LexAgosto
  • 对不起,我认为您需要更清楚地说明。您是否希望打印端点返回的内容(即响应)或从客户端接收的内容(即请求)。在这一点上,我还不清楚。我也开始认为你做错了请求。也许您缺少“Content-encoding”标头,如果没有将其设置为“application/json”,正文解析器将不会尝试解析任何 JSON。
  • 另外请注意,您正在为 POST 请求使用 GET 处理程序(您不止一次声明它)。你不应该。真的。糟透了。
猜你喜欢
  • 2019-02-17
  • 2019-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多