我正在嘗試將用戶引導到適當的頁面(在首選項流程完成之前限制對主頁的訪問)。當我打電話時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;
uj5u.com熱心網友回復:
首先,您必須正確使用“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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/314286.html
