我想根据用户权限动态构建navbar
。
因此,当用户登录后,我即可拨打电话' exports.getMenu'执行一个帮助我构建它的查询。
但我无法在函数范围之外获取值(query.rows),然后将其存储在' res.locals'来自Express。
在请求期间获取值并访问它的正确方法是什么?
server.js
var express = require('express');
var menus = require('./config/menu');
require('./config/passport');
var app = express();
app.use(function(req, res, next)
{
res.locals.user = req.user ? req.user.toJSON() : null;
if(typeof res.locals.user !== 'undefined')
{
if(res.locals.user != null && res.locals.user.id != null)
{
menus.getMenu(req, res, next);
}
}
next();
});
menu.js
var bookshelf = require('../config/bookshelf');
exports.getMenu = function(req, res, next)
{
var sql = "select * from menus"; // Suppose its the query i'm going to execute
menus = bookshelf.knex.raw(sql).then(function(query)
{
return JSON.stringify(query.rows);
});
};
我检查了question,但我很难应用解决方案。 例如,描述的解决方案之一:
function delay() {
// `delay` returns a promise
return new Promise(function(resolve, reject) {
// Only `delay` is able to resolve or reject the promise
setTimeout(function() {
resolve(42); // After 3 seconds, resolve the promise with value 42
}, 3000);
});
}
delay()
.then(function(v) { // `delay` returns a promise
console.log(v); // Log the value once it is resolved
})
.catch(function(v) {
// Or do something else if it is rejected
// (it would not happen in this example, since `reject` is not called).
});
在这种情况下,'延迟功能'是由用户创建的。
在我的问题中,我使用了Bookshelf Js的方法。
所以如果我想使用这个解决方案,我必须覆盖Bookshelf / Knex函数吗?
我还怀疑使用'回调'。 如果我使用'回调'我需要改变Bookshelf功能的工作方式吗?