登录表单从MongoDB取数触发Mongoose回调错误,求替代方案
解决Mongoose findOne() 不再支持回调的问题
新版Mongoose已废弃回调式API,Model.findOne()不再接受回调参数,可通过以下两种方式替代:
方案1:使用Promise的then/catch链式调用
app.post('/login', function(req, res) { monmodel.findOne({PhoneNo: req.body.phone, Password: req.body.password}) .then(user => { if (user) { res.redirect('/hydrometer'); } else { console.log('Invalid'); } }) .catch(err => { console.log(err); }); });
方案2:使用async/await(更易读)
将请求处理函数标记为async,用await等待查询结果,并通过try/catch捕获错误:
app.post('/login', async function(req, res) { try { const user = await monmodel.findOne({PhoneNo: req.body.phone, Password: req.body.password}); if (user) { res.redirect('/hydrometer'); } else { console.log('Invalid'); } } catch (err) { console.log(err); } });
额外提示
- 确保查询条件中的字段名(如
PhoneNo、Password)与你的Mongoose Schema定义完全一致 - 生产环境中不要明文存储密码,建议使用bcrypt等库对密码进行哈希后再存储
内容的提问来源于stack exchange,提问作者Souvik Ghosh
相关产品推荐
相关产品推荐

