【发布时间】:2021-08-05 15:27:37
【问题描述】:
我正在尝试在上线之前模拟生产,并且我有以下设置
package.json
"start": "cross-env NODE_ENV=production node dist/index.js",
index.ts
console.log(process.env.NODE_ENV) // prints "production"
router.use(handleError);
error-handler.ts
import { serializeError } from 'serialize-error';
export function handleError(
err: ResponseError,
_req: Request,
resp: Response,
_next: NextFunction
): void {
if (err) {
resp.status(err.statusCode || 500).json(serializeError(err));
}
}
使用此设置,当有错误请求时,我会在响应中获得堆栈,这是我不想要的。
如果我添加到错误处理函数
if (err) {
if (process.env.NODE_ENV === 'production') {
delete err.stack;
resp.status(err.statusCode || 500).json(serializeError(err));
}
}
然后我没有得到堆栈。但是 Express 不应该在生产中自动删除堆栈吗?
【问题讨论】:
-
Express 在这里没有机会,因为您自己序列化错误对象并发送它。所以,你已经从 Express 手中接过了这份工作。堆栈仍将位于错误对象本身中。这来自错误的根源。
-
@jfriend00 好的,非常感谢您的评论。这是有道理的。我确实记得我对这个序列化程序有一些用处。除了这个堆栈之外,Express 默认功能中是否有任何我的 serializeError 阻止我从中受益的东西?我在想,如果它只是为了堆栈,那么我可以使用我在 OP 中提出的解决方法。
标签: node.js typescript express environment-variables