node.js / backbone.js应用程序加载configuration文件设置

我有一个node / backbone / sails项目,需要加载部署特定的configuration文件。

所以在应用程序的sails部分,我可以在myapp / config / mysettings.js中放置一个configuration文件

并引用它sails.config.mysettings.foo 。 这按预期工作。

但在应用程序的骨干部分,我不能为我的生活弄清楚如何引用相同的文件(…剪切为简洁)。

define([ 'jquery', 'async', ..., **'/config/mysettings.js'** ], function ($, async, ..., **mysettings**) { relevantAjaxFunction: function() { ... **fail**: console.log(mysettings.foo); 

在控制台中生成未定义的消息。 引用像这样的应用程序范围设置文件的正确方法是什么? 我看了,也找不到任何东西,这让我觉得这不是显而易见的,就是我错了。

Sails不会让你的configuration文件公开浏览。 那将是…糟糕。

在这里我可以想到几个选项:

  1. 在您的资产文件夹中指向configuration文件的符号链接。 这里最棘手的部分是符号链接将被原样复制到您的.tmp / public文件夹中,所以如果您在符号链接中使用相对path,则它必须是从.tmp / publicconfig / mysettings的相对path。 js 。 或者你可以在符号链接中使用绝对path。
  2. 制作一个自定义路由,使用fsstream式传输文件:

     require('fs') .createReadStream(sails.config.paths.config+"/mysettings.js") .pipe(res); 

    虽然你应该真的使用path模块来确定文件path,并包装整个事情在try/catch中,以防万一…

  3. 使用策略为每个请求在本地variables中添加configuration设置,例如:

     module.exports = function myConfigPolicy(req, res, next) { res.locals.mysettings = sails.config.mysettings; return next(); } 

    并在您的意见/ layout.ejs做类似的事情:

     <script type="text/javascript"> var mySettings = <%= JSON.stringify(mysettings) %>; </script> 

    调整您select的模板引擎。 当然,这不会使用AMD在运行时加载configuration,所以如果这是一个问题,请select#1或#2!