2013-11-02 62 views
0

我使用快車上的NodeJS平臺,並使用這個指令快遞,擴大在靜態文件變量

app.use('/static', express.static(__dirname + '/static')) 

爲我的JavaScript庫文件,現在我希望能夠寫出這樣的事情,裏面的其中之一靜態文件

[..] var host = <%= host %> [..] 

有沒有可能在靜態提供的文件中擴展變量?

+1

是不是有點矛盾,想成爲一個_static_頁,但在同一時間做變量擴展?爲什麼不簡單地使用可用的模板引擎之一? –

+0

如何將一個本地化的字符串傳輸到js文件中? – Coxer

+0

我明白了。你想動態呈現你的JavaScript文件。問題是,本地化的字符串是否需要在JavaScript文件本身中定義,或者不能將它作爲模板變量傳遞給「視圖」文件? –

回答

0

您可以使用loDash's templating以及使用lodashinexpress的快遞。

+0

是的,當然。我目前使用ejs模板,但我只提供靜態文件夾中的部分html文件。現在我想知道是否可以通過爲這些文件使用特殊的端點來實現變量擴展,並在這些文件中使用.render,或者有其他方法嗎? – Coxer

0

以下是你可能要完善一個想法:

var ejs = require('ejs'); 

//Express.js setup 
... 

app.use('/public/js/myfile.js', function(req, res){ 
    var f = ejs.compile('var host = <%= hostname %>;'); 
    var fileContent = f({hostname: 'somevalue'}); 
    res.setHeader('Content-Type', 'application/javascript'); 
    res.setHeader('Content-Length', fileContent.length); 
    res.send(fileContent); 
}); 
app.use(express.static(path.join(__dirname, 'public'))); 

//Routes definition 
... 

我用EJS因爲那是你已經在使用的東西。所以我們的想法是讓一箇中間件捕獲這些「動態」JavaScript文件的請求,並使用模板引擎來編譯內容。

請注意,我在這裏使用了一個簡單的字符串變量,但是您可以從磁盤讀取文件然後編譯它。

乾杯

0

請參閱我的答案在這裏:https://stackoverflow.com/a/19812753/2728686

使用模板引擎可以提供靜態文件和發送服務器端JavaScript變數靜態HTML文件(或任何玉模板),因爲這樣的:

服務器側(server.js):

app.set('views', __dirname + '/views'); 
app.set('view engine', 'jade'); 

app.get('/', ensureAuthenticated, function(request, response){ 
    response.render('index', { data: {currentUser: request.user.id} }); 
}); 

app.use(express.static(__dirname + '/www')); 

的意見/ index.jade:

!!! 5 
script(type='text/javascript') 
    var local_data =!{JSON.stringify(data)} 

include ../www/index.html