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

时间:2017-03-25 13:08:28

标签: javascript node.js express mongoose

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

1 个答案:

答案 0 :(得分:2)

在您的代码中

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。它是可扩展的,您可以找到许多插件(称为&#34;流&#34;),如果您需要这种功能,它还可以记录到日志聚合器和第三方服务。

呃,当然还有很多其他有效的替代方案out there

[根据OP评论更新]

我想我现在明白你想要实现的目标。 您应该查看实际生成的after响应。如果你试图打印一些你甚至没有碰过响应对象的东西,那么它就不应该被修改(除非你有一些中间件为你做这些 - 比如放一些标题 - )。 请参阅on-finished之类的库,然后您就可以将响应对象发送到客户端。

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

您也可以使用plain node.js APIs

此外,您可能只是在处理程序之后放置另一个中间件并使用响应集和日志传递旁边的请求(快速路由器是基于堆栈的,因此除非您终止请求,否则您可以传递多个处理程序) 。

BTW我只是尝试使用Node.js API或我发布给您的库。

让我知道我是否理解你的意图。