gpt4 book ai didi

node.js - Sentry 无法捕获 Nodejs 环境中的所有错误

转载 作者:太空宇宙 更新时间:2023-11-03 22:09:05 26 4
gpt4 key购买 nike

我正在尝试部署一个 Sentry 安装来捕获我的应用程序中的错误,但不知何故我不太明白如何做到这一点。

我有这个示例应用程序:

const express = require('express');
const app = express();
var Raven = require('raven');
Raven.config('http://6c4b87dasdasdf3ecca9@logs.ekaf.com/7').install();
app.use(Raven.requestHandler());

app.get('/', function mainHandler(req, res) {
throw new Error('Broke!');
});
app.use(Raven.errorHandler());
app.use(function onError(err, req, res, next) {
res.statusCode = 500;
res.end(res.sentry + '\n');
});

const PORT = process.env.PORT || 443;

app.listen(PORT, () => {
console.log(`Server is listening on port ${PORT}`);
});

app.get('/OK', (req, res, next) => {
res.send('route OK');
});

app.get('/KO', (req, res, next) => {
res.send(blabla);
});

Sentry 完美记录了 / 路由上的错误,但没有记录 /KO 路由上的错误。我想让它记录 Node 控制台中可能出现的所有错误,而不使用抛出错误

我该怎么做?

最佳答案

app.use 行放在所有路由之后,特别是 onError 处理程序。 Node 的 native 错误处理可能会先于 Sentry 捕获它。

const express = require('express');
const app = express();
var Raven = require('raven');
Raven.config('http://6c4b87dasdasdf3ecca9@logs.ekaf.com/7').install();
app.use(Raven.requestHandler());

app.get('/', function mainHandler(req, res) {
throw new Error('Broke!');
});
const PORT = process.env.PORT || 443;

app.listen(PORT, () => {
console.log(`Server is listening on port ${PORT}`);
});

app.get('/OK', (req, res, next) => {
res.send('route OK');
});

app.get('/KO', (req, res, next) => {
res.send(blabla);
});

app.use(Raven.errorHandler());
app.use(function onError(err, req, res, next) {
res.statusCode = 500;
res.end(res.sentry + '\n');
});

披露:我在 Sentry 工作,但我不维护我们的 Node SDK。如果您想获得更深入的答案,请在 Node 存储库中提出问题。

关于node.js - Sentry 无法捕获 Nodejs 环境中的所有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47836960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com