Express.js - 如何修改路由中的app.locals变量

Soh*_*azi 10 javascript node.js express

我有一个node.js项目.以下代码是我的app.js文件的一部分.我正在从数据库中进行查询并将结果存储在名为"Cats"的全局变量中.我正在使用此变量在网站的侧边栏上显示类别.我认为它不相关,但我使用Jade作为模板引擎.

var app = express()

var query = "SELECT * FROM findadoc.categories";
client.execute(query, [], function(err, results) {
  if(err) {
    res.status(404).send({meg: err});
  }
  else {
    app.locals.cats = results.rows;
  }
});
Run Code Online (Sandbox Code Playgroud)

在其中一个路由中,我允许用户向数据库添加其他类别.我需要的是'apps.locals.cats'变量来更新新的类别集.无论如何我在路线上修改了这个吗?我试过以下但是没有用.

router.post('/add', function(req, res, next) {
    var cat_id = cassandra.types.uuid();
    var query = "INSERT INTO findadoc.categories(cat_id, name) VALUES (?,?)";
    client.execute(query, [cat_id, req.body.name], {prepare: true},   function(err, results) {
        if(err) {
            res.status(404).send({msg: err});
        } 
        else {
            cats = results.rows;
            req.flash('success', "Category Added");
            res.location('/doctors');
            res.redirect('/doctors');
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

Car*_*los 25

在快递4您可以访问app来自reqreq.app.请参阅请求对象 API文档.

通过req.app.locals在中间件中提供本地人(请参阅req.app)

在您的中间件中,您可以这样做:

router.post('/add', function(req, res, next) {
    // do some cool stuff
    req.app.locals.cats = something;
    // more cool stuff
});
Run Code Online (Sandbox Code Playgroud)

  • req.app.locals 中的任何内容对于应用程序都是全局的,对于每个连接。您不想在那里存储凭据。http://stackoverflow.com/questions/18758158/node-js-is-app-locals-a-global-obj (2认同)