如何为node / express添加自定义错误处理程序

4szc88ey  于 12个月前  发布在  Node.js
关注(0)|答案(1)|浏览(109)

我已经阅读了express docs about error handling,并试图添加一个自定义的错误处理程序,但它从来没有被称为. app.ts:

const express = require('express')
const bodyParser = require('body-parser');
const methodOverride = require('method-override')
const app = express ();
const port = process.env.PORT || 3000;
app.use(express.json());
app.use(cors());
// Configuring body parser middleware
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(methodOverride());
app.use((err, req, res, next) => {
  console.error(err.stack)
  res.status(500).send('my handler')
})
....
....

字符串
下面是一个带有故意错误的函数:

export function getRidesForDate(request: { body: { data: number; }; }, response: { json: (arg0: Ride[] ) => void; }, next: (arg0: { code: any; }) => void) {
    const date = request.body.data;
    const sql = `incorrect query`;
     
    dbconnection.query(sql,function (error: { code: any; }, results: Ride[])
    {
        if (error != null) {
          next(error);
        }
        response.json(results);
      });
    }


错误被捕获,服务器没有崩溃,这很好。但是覆盖的错误处理程序app.use((err, req, res, next)没有被调用-完整的错误堆栈输出到服务器控制台,我想返回一些有意义的东西给客户端。

p1iqtdky

p1iqtdky1#

所以我并不真正理解“中间件”这个术语!我链接到的文档在示例中不包括app.post等。
我找到了一个很好的解释here

const app = express ();
const port = process.env.PORT || 3000;
app.use(express.json());
app.use(cors());
// Configuring body parser middleware
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(methodOverride());
app.listen(port, () => {
  console.log("RideHub server listening on PORT:", port);
});
app.post(..);
app.get(...);

// and last-of-all !
app.use((err, req, res, next) => {
  console.error(err.message);
  //todo: also add to log file
  res.statusMessage = err.message;
  res.status(500).send(err.message)
})

字符串
我仍然不确定如何在客户端获取send(err.message)的内容,res不包括它,所以我改变了statusMessage

相关问题