2013-11-21 23 views
0

通常,通過聲明app.locals變量,如下所示,然後我可以在jade模板中使用該變量。在app.js之外調用app.locals

// 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變量。

回答

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(); 

,然後在玉模板,你可以簡單地調用=whateverName拿到等等等等輸出。

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' } 
0

嘗試......

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

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