我正在尝试使用以下代码将用户保存到我的数据库:
userRoutes.post('/signup', (req, res) => {
if (req.session.user) req.session.destroy();
const user = new User(req.body);
user.save()
.then(savedUser => {
req.session.user = savedUser._id;
res.status(200).json({
success: true,
data: {
firstName: savedUser.firstName,
lastName: savedUser.lastName,
username: savedUser.username,
email: savedUser.email,
dateCreated: savedUser.dataCreated,
_id: savedUser._id
},
});
})
.catch(error => {
res.status(500).json({
success: false,
error
});
});
});
但我仍然收到此错误:UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: cb is not a function
我正在使用mongoose来保存文档。
答案 0 :(得分:1)
我从未使用过connect-mongo
而且我没有安装Mongo自己试一试,但我确实快速查看了源代码,看看能不能解释一下这个问题你有。
似乎最新版本(2.0.0)于3周前发布。我相信这个版本在该版本中有所体现:
https://github.com/jdesboeufs/connect-mongo/commit/a8b0fd49368cfc1ea634d4245105e706d2dd98c9
这改变了它调用回调的方式。
destroy
的处理在这里:
然后调用withCallback
,这是:
我可能完全错了,但这似乎完全符合你的症状。我们调用了一个名为cb
的函数,它不会先检查它是否未定义。
一个简单的测试是将回调函数传递给destroy
。这不应该是必需的,我相信它是connect-mongo
中的一个错误,但它应该有助于确认这确实是您所看到的错误的根源。您可以通过将调试器(例如Chrome开发工具)附加到您的节点并逐步完成直到您遇到错误来进一步诊断。
如果这确实是问题,那么我建议使用connect-mongo
提交错误报告。通过快速浏览一些其他会话存储的源代码,在尝试调用回调之前检查回调是否未定义似乎是标准做法。
我想补充一点,我不认为destroy
是你应该在这里使用的方法。我怀疑你想要regenerate
。但是,我认为这是一个单独的问题,而不是导致您当前错误的原因。
我还注意到,虽然我声明不需要将回复传递给destroy
,regenerate
等,但是当你回复时仍然是一个好主意在继续之前,应该真的等待它完成(或者可能失败)。