是否可以在Exressjs中输出日志数据?

时间:2018-05-30 09:58:03

标签: express

我正在开发一个小的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正确地传递给后端,但看起来req在book route中是空的?

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

1 个答案:

答案 0 :(得分:0)

您可以使用记录器,例如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吗?