【发布时间】:2020-03-08 14:31:32
【问题描述】:
我有下面的例子
module.exports = (err, req, res, next) => {
err.statusCode = err.statusCode || 500;
err.status = err.status || 'error';
if (process.env.NODE_ENV === 'development') {
sendDevError(err, req, res);
} else if (process.env.NODE_ENV === 'production') {
console.log(err); // { message: 'test message', statusCode: '404', status: 'failed' }
let error = { ...err };
console.log(error); // { statusCode: '404', status: 'failed' }
// error.message = err.message;
if (error.name === 'CastError') error = handleCastErrorDB(error);
if (error.code === 11000) error = handleDuplicateFieldsDB(error);
if (error.name === 'ValidationError')
error = handleValidationErrorDB(error);
if (error.name === 'JsonWebTokenError') error = handleJWTError();
if (error.name === 'TokenExpiredError') error = handleJWTExpiredError();
sendProdError(error, req, res);
}
};
魔法伴随着物体的传播。当我克隆err 对象时,由于某种原因,我的克隆对象中缺少message 属性。我通过在对象传播后放置error.message = err.message 解决了这个问题。但是这种方法并不是我想要实现的。有人可以解释一下对象传播是如何在幕后工作的吗?我能做些什么来解决这个奇怪的错误?
【问题讨论】:
-
@jonrsharpe - 哇,我希望我能早点看到那个链接。我从来没有想到过这个exact问题。 :-)
标签: javascript node.js express