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文件公开浏览。 那将是…糟糕。
在这里我可以想到几个选项:
- 在您的资产文件夹中指向configuration文件的符号链接。 这里最棘手的部分是符号链接将被原样复制到您的.tmp / public文件夹中,所以如果您在符号链接中使用相对path,则它必须是从.tmp / public到config / mysettings的相对path。 js 。 或者你可以在符号链接中使用绝对path。
-
制作一个自定义路由,使用
fs
stream式传输文件:require('fs') .createReadStream(sails.config.paths.config+"/mysettings.js") .pipe(res);
虽然你应该真的使用
path
模块来确定文件path,并包装整个事情在try/catch
中,以防万一… -
使用策略为每个请求在本地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!