首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向哨兵发送4XX和5XX错误?

如何向哨兵发送4XX和5XX错误?
EN

Stack Overflow用户
提问于 2022-09-14 16:30:35
回答 1查看 59关注 0票数 1

我想捕捉哨兵的任何4XX和5XX错误。我发现default的哨兵没有将4XX错误记录到哨兵中,所以我也添加了shouldHandleError错误处理程序,但是5XX/4XX的响应仍然不会被发送到哨兵。

代码语言:javascript
复制
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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-10 08:55:38

你把错误和正确的反应混为一谈。

res.status(502)是一个有效的响应,它将结束中间件管道,不会触发任何错误中间件,因为响应是请求已经完成。

您要查找的是错误,在这种情况下,分配的状态代码是502,然后相应地处理。

代码语言:javascript
复制
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的“默认错误处理程序”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73720316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档