【问题标题】:How to return a Boolean from Mongoose Schema find() - based on attribute found如何从 Mongoose Schema find() 返回布尔值 - 基于找到的属性
【发布时间】: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


【解决方案1】:

首先,你必须正确使用'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;

【讨论】:

    猜你喜欢
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 2018-05-18
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多