【问题标题】:Handling assets in node.js with express使用 express 处理 node.js 中的资产
【发布时间】:2012-10-25 23:15:18
【问题描述】:

好的,所以我要做的是在使用 express 时手动处理我的资产。我的意思是我不必在每个页面上都有每个样式表/javascript 文件。所以我希望能够在每条路由中指定是否要使用另一个 javascript 文件。例如:

app.get('/testing',function(req,res,next){
      assets.addJS('my-javascript-file');
      res.render('testing');
});

所以现在当模板渲染时,我想要所有已添加到局部变量中的 javascript 文件。我不想在每次调用 render 时都传递它们,因为我想在其他地方添加 javascript,并且可能不一定需要向模板发送任何内容,这会导致我不会意外传递它。我想要实现的另一件事是缓存。我知道默认情况下,一旦拥有资产,它就会发回未修改的 304,但我什至不希望它发出该请求,所以我希望在文件输出时对文件执行查询字符串,可能是最后一次修改和这样,如果我更改它们,它会自动告诉用户浏览器获取最新文件,但除此之外,它会缓存它们以节省带宽/请求(亚马逊 s3 对这些文件收费)。如果有人能指出我正确的方向,或者如果已经有一个插件,请告诉我。谢谢。

【问题讨论】:

    标签: node.js templates express assets


    【解决方案1】:

    您可以围绕此构建资产管理器:

    app.get(function(req, res) {
      res.locals.files = [ 'somefile.js', 'somefile2.js' ];
      res.render('someview');
    });
    

    视图只会创建多个脚本文件。

    head
      each file in files
        script(src=base_url + '/' + file)
    

    如果您想将文件合并到一个请求中,您可能需要进一步扩展它。您可以创建一个可以获取文件数组并在每个请求上合并它们的路由。您可以使用 res.sendFile 提供文件。如果我没记错的话,这将处理所有的标头和缓存。

    【讨论】:

    • 所以你使用 app.get,而不是 app.use?除此之外,它还适用于 404 渲染。昨晚我尝试了类似的方法,它适用于常规页面,但问题是 404 页面会说没有内容。
    • 好吧,这取决于,如果您想为某些路线拥有某些文件,那么如果不是 app.use,则使用 app.get。老实说,除非你有一个非常大的 javascript 应用程序,否则这种加载主要是浪费时间。
    • 所以你认为最好将它们全部输出到一个单独的 javascript 文件中并提供服务,而不管它们在网站上的什么位置,也不管它们是否真的需要以前的 javascript提供?
    • 是的,只要有正确的标题,文件就可以被缓存。对于第一页,您可能需要加载更多,但之后应该没问题。如果这确实是一个大问题,您可以随时查看模块系统以延迟加载模块。
    猜你喜欢
    • 2012-03-02
    • 2014-12-15
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 2012-10-25
    • 2013-03-20
    • 2017-07-25
    • 1970-01-01
    相关资源
    最近更新 更多