Sailsjs - 动态加载js

时间:2014-07-21 15:32:44

标签: javascript node.js sails.js

- >我使用风帆0.10.9

我试图根据路由和控制器名称加载客户端javascript,我想在包含它之前控制文件是否存在。

我以为我可以用

req.options.controller
req.options.action

在http.js中使用中间件,但它总是空的。

那么,你觉得我该怎么做?目的是注入javascript文件(如果存在)。我尝试过以下政策:

'*': 'loadScript'

但它不会在/

之外的其他页面上加载

任何帮助都会非常感激

2 个答案:

答案 0 :(得分:0)

政策是正确的解决方案;您必须记住的关于策略的事情只是它们仅适用于控制器操作,而不适用于视图。因此,如果您有 config / routes.js 文件:

"/myPage": {view: "myView"}

当您访问 / myPage 时,该政策将不适用。相反,你可以这样做:

"/myPage": "StaticController.myView"

并在 api / controllers / StaticController.js

myView: function (req, res) {
    res.view("myView");
}

然后将应用该政策。

答案 1 :(得分:0)

好的,感谢@ scott-gress带领我走向好路,我就是这样做的。

api/policies/serveStatic.js

var fs = require('fs');
module.exports = function(req, res, next) {
    if(fs.existsSync(sails.config.local_config.js_dir_path + '/' + req.options.controller + '/common.js'))
        res.locals.scripts.push(sails.config.local_config.js_public_path+ '/' + req.options.controller + '/common.js')
    if(fs.existsSync(sails.config.local_config.css_dir_path + '/' + req.options.controller + '/common.css'))
        res.locals.styles.push(sails.config.local_config.css_public_path+ '/' + req.options.controller + '/common.css')
    if(fs.existsSync(sails.config.local_config.js_dir_path + '/' + req.options.controller + '/' + req.options.action + '.js'))
        res.locals.scripts.push(sails.config.local_config.js_public_path+ '/' + req.options.controller + '/' + req.options.action + '.js')
    if(fs.existsSync(sails.config.local_config.css_dir_path + '/' + req.options.controller + '/' + req.options.action + '.css'))
        res.locals.styles.push(sails.config.local_config.css_public_path+ '/' + req.options.controller + '/' + req.options.action + '.css')
    next();
};

并在config/policies.js

UserController: {
  '*': ['isAuthenticated', "serveStatic"]
},

之后,在views/layout.ejs文件的末尾:

<% if(res.locals.scripts) { %>   
    <% res.locals.scripts.forEach(function(script, i ) { %>
        <script src="<%= script %>" ></script>
     <% }) %>
<% }%>

这样做的好处是,在任何操作中,如果我愿意,我可以添加自己的js脚本(或css)。