在app.js之外调用app.locals

时间:2013-11-21 05:18:52

标签: javascript node.js express

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

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

app.locals.varName = 'blah blah'

我希望将app.local.varName移动到外部文件(即:vars.js),然后将它们导入app.js中以供使用。我熟悉export module / require系统,但我不知道如何使变量变为“活动”以供使用。这是我到目前为止所得到的:

// 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

但是,我的jade模板仍然无法识别varName变量。

3 个答案:

答案 0 :(得分:0)

导出中的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' }

答案 1 :(得分:0)

在玩完之后,我想出了我在寻找的东西:

// 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即可获得等等输出。

答案 2 :(得分:0)

试试这个......

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

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