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

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 /公司发送GET请求。 但我没有得到任何输出在我的控制台。 我究竟做错了什么? 或者你会怎么做?

在你的代码中你正在做

 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并不是我如何logging生产中的东西。 相反,我会使用一个日志库,如bunyan ,这是可扩展的,并具有json的日志logging。 我喜欢他们的观点,即日志应该是机器而不是人类,因为他们也提供了一个二进制工具,以更人性化的格式打印JSON。 它是可扩展的,您可以find很多插件(称为“stream”),如果您需要这种function,还可以login聚合器和第三方服务。

呃,当然还有其他许多有效的select。

[根据OP评论更新]

我想我现在明白你想要达到的目标。 实际生成after ,您应该看看实际的响应。 如果你试图打印一些你甚至没有碰到响应对象的东西,那么就不应该修改它(除非你有一些中间件为你做了这个,比如放一些头文件)。 参考一个库,如完成 ,你会得到响应对象之前发送到客户端。

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

你也可以用简单的node.js API去。

你也可以在你的处理程序之后直接放置另一个中间件,然后把请求传给响应集并logging下来(表示路由器是基于堆栈的,所以除非你终止了你可以通过几个处理程序的请求)。

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

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