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);
我正在使用适用于 Chrome 浏览器的 POSTMAN 向/api/companies 发出 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
并不是我在生产环境中记录内容的方式。相反,我会使用像 bunyan 这样的日志库,它是可扩展的,并且具有仅 json 日志记录功能。我喜欢他们的愿景,即日志应该用于机器而不是人类,顺便说一下,他们还提供了一个二进制工具,以更人性化的格式漂亮地打印 JSON。它是可扩展的,您可以找到很多插件(称为“流”),如果您需要这种功能,它们也会记录日志聚合器和第三方服务。
呃,当然还有很多其他有效的替代品 out there .
[根据 OP 评论更新]
我想我现在明白您要实现的目标了。
您应该查看实际 after
生成的响应。在您尝试打印您甚至没有触及响应对象的内容的地方,因此不应修改它(除非您有一些中间件为您做这件事 - 例如放置一些标题 - )。
引用库,例如 on-finished您将在将其发送给客户端之前获得响应对象。
您没有明确说明您的 express
或 node
版本,所以我只能猜测,但请尝试一下。
您也可以使用普通的 node.js APIs .
你也可以在你的处理程序之后放置另一个中间件,并在它旁边传递带有响应集的请求,然后只记录(express router 是基于堆栈的,所以除非你终止请求,否则你可以传入多个处理程序) .
顺便说一句,我只是尝试我们的 Node.js API 或我发布给您的库。
如果我理解了您的意思,请告诉我。
关于javascript - 如何使用 Express 在 Node.js 中打印响应主体(或 POST 时的请求主体)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43016731/