【问题标题】:Express, expand variable in static file表达,扩展静态文件中的变量
【发布时间】:2013-11-13 11:33:26
【问题描述】:

我在 nodejs 平台上使用 express 并使用此指令提供我的 javascript 库文件

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

现在我希望能够在这些静态文件之一中编写类似的内容

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

是否有可能在静态提供的文件中扩展变量?

【问题讨论】:

  • 想要服务一个static页面,同时又做变量扩展是不是有点矛盾?为什么不简单地使用可用的模板引擎之一?
  • 如何将本地化字符串传输到 js 文件中?
  • 我明白了。您想动态呈现您的 javascript 文件。问题是,本地化字符串是否需要在 javascript 文件本身中定义,还是不能将其作为模板变量传递给“视图”文件?
  • 我有一个 ejs 模板,其中包括一个特定于页面的 js 文件。 js 文件显示一个带有本地化字符串的对话框。目前我正在将此字符串打印到 ejs 文件中的 javascript 变量中,并在 js 文件中访问它。但我认为这不是很干净......

标签: javascript node.js express ejs


【解决方案1】:

以下是您可能需要改进的想法:

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文件的请求,并使用模板引擎来编译内容。

注意我在这里使用了一个简单的字符串变量,但是你可以从磁盘读取文件然后编译它。

干杯

【讨论】:

    【解决方案2】:

    您可以将loDash's templating 与使用lodashinexpress 的快递一起使用。

    【讨论】:

    • 是的,当然。我目前正在使用 ejs 模板,但我只在我的静态文件夹中提供部分 html 文件。现在我想知道是否可以通过为该文件使用特殊端点并在这些文件中使用 .render 来实现变量扩展,还是有其他方法?
    【解决方案3】:

    请在此处查看我的回答:https://stackoverflow.com/a/19812753/2728686

    使用 Jade 模板引擎,您可以提供静态文件并将服务器端 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'));
    

    views/index.jade:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-13
      • 1970-01-01
      相关资源
      最近更新 更多