gpt4 book ai didi

javascript - 即使我有 catch() 函数,为什么也会收到 UnhandledPromiseRejectionWarning?

转载 作者:行者123 更新时间:2023-12-03 03:09:43 24 4
gpt4 key购买 nike

我正在尝试使用以下代码将用户保存到我的数据库:

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:未处理的 promise 拒绝(拒绝 ID:1):TypeError:cb 不是函数

我正在使用 mongoose 来保存文档。

最佳答案

我从未使用过 connect-mongo 并且我没有安装 Mongo 来尝试一下,但我确实快速浏览了源代码,看看是否可以解释一下您遇到的问题。

最新版本(2.0.0)似乎是三周前发布的。我相信该版本中包含此更改:

https://github.com/jdesboeufs/connect-mongo/commit/a8b0fd49368cfc1ea634d4245105e706d2dd98c9

这改变了它调用回调的方式。

destroy的处理在这里:

https://github.com/jdesboeufs/connect-mongo/blob/509c8732061b7786857f6b835f547980c1d81c7f/src/index.js#L292

然后调用withCallback,如下:

https://github.com/jdesboeufs/connect-mongo/blob/509c8732061b7786857f6b835f547980c1d81c7f/src/index.js#L5

我可能完全错了,但这似乎完全符合你的症状。有一个名为 cb 的函数被调用,并且它不会首先检查它是否未定义。

一个简单的测试是将回调函数传递给destroy。这不应该是必需的,我相信这是 connect-mongo 中的一个错误,但它应该有助于确认这确实是您所看到的错误的根源。您可以通过将调试器(例如 Chrome 开发工具)附加到您的 Node 并逐步执行直到遇到错误来进一步诊断。

如果这确实是问题所在,那么我建议使用 connect-mongo 提交错误报告。快速浏览一些其他 session 存储的源代码,在尝试调用回调之前检查回调是否未定义似乎是标准做法。

我想补充一点,我不认为 destroy 是您应该在此处使用的方法。我怀疑您想要重新生成。但是我相信这是一个单独的问题,而不是导致您当前错误的原因。

我还注意到,虽然我说过不需要将回调传递给 destroyregenerate 等,但这仍然是一个好主意因为您确实应该等待完成(或可能失败)然后再继续。

关于javascript - 即使我有 catch() 函数,为什么也会收到 UnhandledPromiseRejectionWarning?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46999000/

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