【问题标题】:ExpressJS POST cannot log bodyExpressJS POST 无法记录正文
【发布时间】:2015-01-12 02:43:07
【问题描述】:

在对升级版本和使用正文解析器的不同中间件/方式进行了大量摆弄之后,我仍然卡住了。

我有一个 Iphone 应用程序,它发布 2 件事情(2 件独立的事情)。首先是一个图像,它有效。 第二个是我尝试放入 mongodb 的 json 对象。

无论我做什么,我似乎都无法记录请求的内容。

var express = require('express');
var logger = require('morgan');
var fs = require('fs');
var json = require('express-json');
var path = require('path');
var errorHandler = require('errorhandler');
MongoClient = require('mongodb').MongoClient,
Server = require('mongodb').Server,
CollectionDriver = require('./collectionDriver').CollectionDriver;
FileDriver = require('./fileDriver').FileDriver;

...

app.use(json());
//app.use(bodyParser.urlencoded({ extended: true }));
app.use(logger('dev'));
app.use(express.static(path.join(__dirname, 'public')));

...

app.post('/:collection', function(req, res) {
  console.warn(req.body.poi.toString());
  var object = req.body;
  var collection = req.params.collection;
  console.warn("Post: " + req.toString());
  collectionDriver.save(collection, object, function(err,docs) {
      if (err) { res.send(400, err); } 
      else { res.send(201, docs); }
  });
});

我尝试过记录(日志、警告)req.body、req 等,但无济于事。 我使用的是 express-json 而不是 url 编码,我认为不需要它。

摩根在我发帖时输出以下内容

POST /pois 200 15.983 ms - 63

没有别的了!

【问题讨论】:

  • 如果你在路由中插入console.dir(req.headers['content-type']);,控制台会显示什么?
  • 嗯,成功了! 查看 console.dir 的文档
  • sry,并没有真正回答你的问题......它是'application/json'
  • console.dir(typeof(req.body));给出“未定义”
  • 您是否尝试注释掉 app.use(json()); 并改用 app.use(bodyParser.json());

标签: json node.js express


【解决方案1】:

它显然做不到,正如这个已关闭的问题 https://github.com/expressjs/morgan/issues/16 中所述 morgan 不适用于此类工作。尝试改用 Winston,或者干脆 console.log

【讨论】:

    【解决方案2】:

    这对我有用:

    const express = require('express')
    const app = express()
    app.use(express.json())
    
    var morgan = require('morgan')
    
    morgan.token('response-body', (req, res) => {return JSON.stringify(req.body)});  // define 'response-body' token using JSON.stringify
    
    app.use(morgan(':method :url :response-time :response-body')) //include newly defined ':response-body' token
    
    app.post(/....)
    

    【讨论】:

      猜你喜欢
      • 2014-12-19
      • 2011-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-05
      • 1970-01-01
      相关资源
      最近更新 更多