在app.js之外调用app.locals

Calling app.locals outside of app.js

本文关键字:app 调用 locals js      更新时间:2023-09-26

通常,通过声明app.locals变量,如下所示,我可以在jade模板中使用该变量。

// app.js
var express = require('express');
var app = express();
app.locals.varName = 'blah blah'

我希望将app.local.varName移到一个外部文件(即:vars.js)中,然后将它们导入到app.js中以供使用。我熟悉导出模块/需求系统,但我不知道如何使变量变为"活动"以供使用。这就是我目前所掌握的:

// vars.js 
module.exports = {
   all : {
      var express = require('express');
      var app = express();          
      app.locals.varName = 'blah blah'
   }
}

然后导入回app.js:

// app.js
var variables = require('./vars');
var variables2 = variables.all()
variables2

然而,我的翡翠模板仍然无法识别varName变量。

导出中的all似乎无效。但这应该很容易解决。这里的问题可能是因为本地人被添加到了一个从all()创建的单独的应用程序中,而不是你在app.js中使用的应用程序。试着这样修改你的代码(传递你正在使用的app):

app.js

var express = require('express');
var app = express();
var variables = require('./vars');
variables.all(app)
console.log(app.locals);

vars.js

module.exports = {
   all : function(app){
      app.locals.varName = 'blah blah'
   }
}

输出

{ [Function: locals]
  settings:
   { 'x-powered-by': true,
     etag: true,
     env: 'development',
     'subdomain offset': 2,
     view: [Function: View],
     views: '/home/hadoop/views',
     'jsonp callback name': 'callback',
     'json spaces': 2 },
  varName: 'blah blah' }

玩过之后,我发现了我想要的东西:

// vars.js 
module.exports = {
   all : function() {
      var siteName = 'blah blah'
      return siteName;
   }
};
// app.js
var express = require('express');
var app = express(); 
app.locals.whateverName = require('./vars').all();

然后,在jade模板中,您可以简单地调用=whateverName来获得废话输出。

试试这个。。。

var app = express();
var variables = require('./vars')(app);

module.exports =function(app) {
    app.locals.varName = 'blah blah'
}