如何使用 Express 在 Node.js 中打印响应正文(或 POST 时的请求正文)?

Udd*_*uri 5 javascript mongoose node.js express

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);
Run Code Online (Sandbox Code Playgroud)

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

Lex*_*sto 4

在你的代码中你正在做

router.get('/companies', function(req, res){
  console.log(res.body);
});
Run Code Online (Sandbox Code Playgroud)

虽然应该是

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

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

[编辑]

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

呃,当然还有很多其他有效的选择。

[根据OP评论更新]

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

您没有明确说明您的express版本node,所以我只能猜测,但请尝试一下。

您还可以使用普通的node.js API

此外,您也可以在处理程序之后放置另一个中间件,并在其旁边传递带有响应集的请求,然后仅记录(快速路由器是基于堆栈的,因此除非您终止请求,否则您可以传入多个处理程序)。

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

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