Javascript Express中间件在Next.js自定义服务器中记录错误
我不知道如何使用express中间件将错误记录到Sentry,使用:Javascript Express中间件在Next.js自定义服务器中记录错误,javascript,node.js,express,next.js,sentry,Javascript,Node.js,Express,Next.js,Sentry,我不知道如何使用express中间件将错误记录到Sentry,使用: Next.js v9.0.5 Express v4.17.1 哨兵/节点v“5.6.2 我尝试了不同的中间件版本,结果不同。但是,没有一个是预期的行为 尝试1: function logError(err, req, res, next) { Sentry.captureMessage(`${err.stack} - ${err.message}`) Sentry.captureException(err) c
- Next.js v9.0.5
- Express v4.17.1
- 哨兵/节点v“5.6.2
function logError(err, req, res, next) {
Sentry.captureMessage(`${err.stack} - ${err.message}`)
Sentry.captureException(err)
console.log('Error reported to sentry.')
next(err)
}
function logError(err, req, res) {
Sentry.captureMessage(`${err.stack} - ${err.message}`)
Sentry.captureException(err)
console.log('Error reported to sentry.')
// Just removing this line from Try 1
// next(err)
}
function logError(err, req, res) {
Sentry.captureMessage(`${err.stack} - ${err.message}`)
Sentry.captureException(err)
console.log('Error reported to sentry.')
// Send an error instead of call next(err)
res.statusCode = 500
res.send('Internal server error')
}
function logError(err, req, res) {
Sentry.captureMessage(`${err.stack} - ${err.message}`)
Sentry.captureException(err)
console.log('Error reported to sentry.')
// Throw the error instead of call next(err)
throw new Error(err)
}
这不是调用sentry方法,也不是执行console.log('Error reported to sentry')
,就像直接进入next(err)
而不执行此中间件的任何代码一样
试试2:
function logError(err, req, res, next) {
Sentry.captureMessage(`${err.stack} - ${err.message}`)
Sentry.captureException(err)
console.log('Error reported to sentry.')
next(err)
}
function logError(err, req, res) {
Sentry.captureMessage(`${err.stack} - ${err.message}`)
Sentry.captureException(err)
console.log('Error reported to sentry.')
// Just removing this line from Try 1
// next(err)
}
function logError(err, req, res) {
Sentry.captureMessage(`${err.stack} - ${err.message}`)
Sentry.captureException(err)
console.log('Error reported to sentry.')
// Send an error instead of call next(err)
res.statusCode = 500
res.send('Internal server error')
}
function logError(err, req, res) {
Sentry.captureMessage(`${err.stack} - ${err.message}`)
Sentry.captureException(err)
console.log('Error reported to sentry.')
// Throw the error instead of call next(err)
throw new Error(err)
}
现在,当出现错误时,正在执行我的代码!正在登录Sentry并执行控制台.log('error reported to Sentry')!但是,当我进入失败的页面时,请求看起来像是永远挂起,没有任何响应。这不是我想要的
尝试3次:
function logError(err, req, res, next) {
Sentry.captureMessage(`${err.stack} - ${err.message}`)
Sentry.captureException(err)
console.log('Error reported to sentry.')
next(err)
}
function logError(err, req, res) {
Sentry.captureMessage(`${err.stack} - ${err.message}`)
Sentry.captureException(err)
console.log('Error reported to sentry.')
// Just removing this line from Try 1
// next(err)
}
function logError(err, req, res) {
Sentry.captureMessage(`${err.stack} - ${err.message}`)
Sentry.captureException(err)
console.log('Error reported to sentry.')
// Send an error instead of call next(err)
res.statusCode = 500
res.send('Internal server error')
}
function logError(err, req, res) {
Sentry.captureMessage(`${err.stack} - ${err.message}`)
Sentry.captureException(err)
console.log('Error reported to sentry.')
// Throw the error instead of call next(err)
throw new Error(err)
}
与Try 1相同的结果+奖励:TypeError:res.send不是一个函数
。什么
尝试3次:
function logError(err, req, res, next) {
Sentry.captureMessage(`${err.stack} - ${err.message}`)
Sentry.captureException(err)
console.log('Error reported to sentry.')
next(err)
}
function logError(err, req, res) {
Sentry.captureMessage(`${err.stack} - ${err.message}`)
Sentry.captureException(err)
console.log('Error reported to sentry.')
// Just removing this line from Try 1
// next(err)
}
function logError(err, req, res) {
Sentry.captureMessage(`${err.stack} - ${err.message}`)
Sentry.captureException(err)
console.log('Error reported to sentry.')
// Send an error instead of call next(err)
res.statusCode = 500
res.send('Internal server error')
}
function logError(err, req, res) {
Sentry.captureMessage(`${err.stack} - ${err.message}`)
Sentry.captureException(err)
console.log('Error reported to sentry.')
// Throw the error instead of call next(err)
throw new Error(err)
}
这是我期望的最接近的一个。正在调用我的中间件代码向Sentry报告错误+请求不会永远挂起。不过,错误堆栈很奇怪:
错误:[对象]
在logError(/server/logger.js:43:9)
我的问题是:
- 如何才能正确地执行此操作
- 这是怎么回事?错误中间件在express/next.js下是如何工作的
sentry/node
?这样您就可以使用默认的中间件app.use(sentry.Handlers.requestHandler());
和app.use(sentry.Handlers.errorHandler());
或者在您的路由中捕获错误和`sentry.captureException(e)`