gpt4 book ai didi

node.js - 如何防止 Node 在我的 NextJS/Express 应用程序中将异常记录到控制台?

转载 作者:太空宇宙 更新时间:2023-11-04 01:35:55 27 4
gpt4 key购买 nike

我有一个 Express 应用程序,它在 NextJS 应用程序中运行博客,与 example in their repo 非常相似。

我已经对其进行了设置,以便我的应用程序运行查询来获取博客文章,如果结果为空,则会抛出 NotFoundException

我在我的 NextJS _error.js 中发现了这个异常文件,它类似于 React 错误边界,我在其中将用户路由到我的 404 页面。这部分工作正常。

我遇到的问题是这个异常被记录到 Node 控制台,即使我在捕获异常时没有记录它。这会用我们所有的 404 污染我们公司的日志记录软件

这里是否缺少一些 Node/快速设置来阻止记录异常?这是我的 Express 流程错误处理程序:

process.on('unhandledRejection', (reason, promise) =>
console.error(`Unhandled Rejection at: ${promise}.\nreason: ${reason.stack || reason}`));

我知道那里有一个日志,但我要删除的日志的格式与此不同,所以我确信这不是源。

最佳答案

我不会假装知道发生了什么,但我最好的猜测是 next.js 正在某处记录错误。我做了一些挖掘,发现服务器代码中有一个错误记录器,除非在服务器上设置了 quiet 属性,否则它将记录错误:

https://github.com/zeit/next.js/blob/canary/packages/next-server/server/next-server.ts#L105 :

return this.run(req, res, parsedUrl)
.catch((err) => {
this.logError(err)
res.statusCode = 500
res.end('Internal Server Error')
})

这是 logError 函数的签名和正文:

private logError(...args: any): void {
if (this.quiet) return
// tslint:disable-next-line
console.error(...args)
}

如果您查看有关将下一个 API 与自定义服务器一起使用的文档,它会指出以下可以传递给构造函数的选项对象属性:

The next API is as follows:

next(opts: object) Supported options:

  • dev (bool) whether to launch Next.js in dev mode - default false

  • dir (string) where the Next project is located - default '.'

  • quiet (bool) Hide error messages containing server information - default false

  • conf (object) the same object you would use in next.config.js - default {}

构造下一个对象时,尝试将安静传递为 true 以查看是否可以解决您的问题:

const express = require('express')
const next = require('next')

const port = parseInt(process.env.PORT, 10) || 3000
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev, quiet: true })
const handle = app.getRequestHandler()

文档还提到在非生产环境中记录错误(当 process.env.NODE_ENV !== '生产' 时识别),因此我还会检查以确保您在启动应用程序时将 NODE_ENV 设置为“生产”:

NODE_ENV=production node server.js

希望这会有所帮助!

关于node.js - 如何防止 Node 在我的 NextJS/Express 应用程序中将异常记录到控制台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54632043/

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