我使用Express.js
使用MongoDB
支持Mongoose
个应用。我需要忽略来自MongoDB的重复键错误(错误代码11000)并仍然返回204 HTTP响应。我们的想法是使用post
上的save
挂钩,使用错误并忽略它。
服务层
const createMyModel = (req, res, next) => {
MyModel.create({...data})
.then(createRes => res.status(204).send())
.catch(next)
}
架构 - 保存挂钩
MySchema.post('save', (err, res, next) => {
if (!err || (err.name === 'MongoError' && err.code === 11000)) {
// The duplicate key error is caught here but somehow
// the catch on my service layer gets triggered
next();
}else{
next(err)
}
});
答案 0 :(得分:1)
next
中的Mongoose
回调会跟踪名为firstError
的内容。这是存储重复键错误等内部错误的地方。这可以防止用户覆盖错误状态并且调用next会导致检查firstError
并触发拒绝承诺,即使有人试图呼叫next()
或next(null)
。
答案 1 :(得分:0)
如果你想完全忽略它们,我认为你可以在schema.options对象中将emitIndexErrors设置为false。