【发布时间】:2021-12-01 22:22:46
【问题描述】:
我正在尝试将用户引导至相应的页面(在完成首选项流程之前限制对主页的访问)。当我调用preferencesFlowCompleted(req, next) 时,我期望返回一个Boolean 值,但是我得到一个Promise {undefined}。因此,我的家乡路线不受限制,因为 Promise {undefined} 的计算结果为 true。
/**
* Get home page.
* @param {*} req
* @param {*} res
* @param {*} next
*/
exports.getHome = (req, res, next) => {
if (preferencesFlowCompleted(req, next)) {
res.status(202).render('home');
} else {
res.redirect('/preferences');
}
};
有谁知道在这种情况下我如何返回Boolean?
/**
* Import schemas.
*/
const Preference = require('../models/preference');
async function preferencesFlowCompleted(req, next) {
Preference.findOne({ userId: req.session.userId }, (err, preference) => {
if (err) { return next(err); }
if (preference) {
return preference.completed; // this is a boolean attribute
} else {
return false;
}
});
};
module.exports = preferencesFlowCompleted;
【问题讨论】:
-
首先,你必须“等待”返回:
if (await preferencesFlowCompleted(req, next))和exports.getHome = async (req, res, next) -
SyntaxError: await 仅在异步函数中有效 :(
-
尝试解决方案,调用getHome时出现'SyntaxError: await is only valid in async function'?
-
您的以下解决方案有效,谢谢!
标签: node.js mongodb promise routes boolean