如何从Mongoose Schema find()返回一个布尔值-基于找到的属性



我试图引导用户到适当的页面(限制访问主页,直到首选项流已经完成)。当我调用preferencesFlowCompleted(req, next)时,我期望返回Boolean值,但是我得到了Promise {undefined}。因此,由于Promise {undefined}计算为true,因此我的home route不受限制。

/**
* 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;

首先,你必须正确使用'async/await'。我目前没有安装mongo,但是试试这个:

/**
* Get home page.
* @param {*} req 
* @param {*} res 
* @param {*} next 
*/
exports.getHome = async (req, res, next) => {
if (await preferencesFlowCompleted(req, next)) {
res.status(202).render('home');
} else {
res.redirect('/preferences');
}
};

:

/**
* Import schemas.
*/
const Preference = require('../models/preference');
async function preferencesFlowCompleted(req, next) {
try {
const preference = await Preference.findOne({ userId: req.session.userId }); // maybe .exec() for better traces
return preference ? preference.completed : false;
} catch (err) {
return next(err);
}   
}     
module.exports = preferencesFlowCompleted;

相关内容

  • 没有找到相关文章

最新更新