【问题标题】:Is it possible to output log data in Exressjs?是否可以在 Exressjs 中输出日志数据?
【发布时间】:2018-05-30 09:58:02
【问题描述】:

我正在开发一个小型 MEAN 应用程序,但在尝试删除或更新记录时遇到了问题。

book.component.ts

deleteBook(id) {
  this.api.deleteBook(id)
    .subscribe(res => {
        this.router.navigate(['/books']);
      }, (err) => {
        console.log(err);
      }
    );
}

api.service.ts

deleteBook(id: string): Observable<{}> {
  return this.http.delete(`${apiUrl}/${id}`, httpOptions)
    .pipe(
      catchError(this.handleError)
    );
}

这是 ExpressJS 和 Angular 的命令行输出:

[1] [HPM] Rewriting path from "/api/5b0e61859a51ca1cc05ef819" to "http://localhost:3000/api/5b0e61859a51ca1cc05ef819"
[0] DELETE /api/5b0e61859a51ca1cc05ef819 500 0.180 ms - -
[1] [HPM] DELETE /api/5b0e61859a51ca1cc05ef819 ~> http://localhost:3000

在浏览器控制台中得到这个:

后端返回代码 500,正文为:null

这是我的 /routes/book.js 删除函数:

router.delete(':/id', function(req, res, next) {
  Book.findByIdAndRemove(req.params.id, req.body, function (err, post) {
    if (err) return next (err);
    res.json(post);
  })
})

所以看起来 id 已正确传递到后端,但在 book 路由中 req 似乎是空的?

是否可以记录 ExpressJS 方面发生的事情?

【问题讨论】:

  • 您致电next(err),您应该在某处处理该错误。显示处理应用错误的代码。

标签: express


【解决方案1】:

您可以使用记录器,例如 morgan

npm i morgan的依赖添加到你的服务器,然后添加morgan作为中间件:

var morgan = require('morgan');
// Standard Apache combined log output
app.use(morgan('combined'));

您可能想要使用的另一个记录器是winston

或者在所有其他路线之前添加这个:

// Only in development
if (process.env.NODE_ENV === 'development') {
  app.use((req, res, next) => {
    console.log(req);
    next();
  }
}

编辑:你使用body-parser吗?

【讨论】:

  • 我认为app.use(express.json()); 不需要这样做我也试过温斯顿。 winston.log('debug', 'Now my debug messages are written to console!'); 这确实显示在控制台中。但这在我的删除功能中没有出现winston.level = 'debug'; winston.log(req.body);
  • 刚刚尝试用bodyParser.json 替换express.json,但结果就是游戏。
  • 你添加了带有app.use(bodyParser.json());的body-parser吗?你试过我最后的建议了吗?也许您需要为您的问题添加更多代码。
猜你喜欢
  • 2015-08-18
  • 2019-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多