我想捕捉哨兵的任何4XX和5XX错误。我发现default的哨兵没有将4XX错误记录到哨兵中,所以我也添加了shouldHandleError错误处理程序,但是5XX/4XX的响应仍然不会被发送到哨兵。
import express, { Express } from 'express';
import * as Sentry from '@sentry/node';
import config from '../../../config/default';
import mountRoutes from './routers';
initSentry();
const app = express();
setupSentryHeaders(app);
app.use(express.json());
app.get('/',(req: any , res: any) => {
res.sendStatus(502)
})
setSentryErrorHandler(app);
app.listen(8000, async () => {
console.log(`service running...`);
});
function initSentry() {
Sentry.init({
dsn: config.sentry_dsn,
environment: "development",
attachStacktrace: true
});
}
function setSentryErrorHandler(app: Express) {
app.use(Sentry.Handlers.errorHandler({
shouldHandleError(error) {
const statusCode = error.statusCode
if(statusCode > 400 ){
return true;
}
return false;
},
}));
}
function setupSentryHeaders(app: Express) {
app.use(Sentry.Handlers.requestHandler() as express.RequestHandler);
}发布于 2022-10-10 08:55:38
你把错误和正确的反应混为一谈。
res.status(502)是一个有效的响应,它将结束中间件管道,不会触发任何错误中间件,因为响应是请求已经完成。
您要查找的是错误,在这种情况下,分配的状态代码是502,然后相应地处理。
app.get('/',(_, res) => {
const err = new Error('Something went wrong');
err.statusCode = 502;
throw err;
})这+您的shouldHandleError将使它“可捕获”,作为表达式的默认错误处理程序,从err.statusCode分配响应状态代码,请参阅https://expressjs.com/en/guide/error-handling.html的“默认错误处理程序”。
https://stackoverflow.com/questions/73720316
复制相似问题