Javascript 帆船:来自翡翠模板的当地人

Javascript 帆船:来自翡翠模板的当地人,javascript,node.js,sails.js,momentjs,Javascript,Node.js,Sails.js,Momentjs,我正试图利用moment.js的优势,在sails应用程序下解析jade模板中的日期。 我已经读到,为了在视图服务器端使用moment.js,我必须使用locals的概念 因此,根据我的建议,我将我的路线修改为: var moment = require("moment"); ... 'get /post/:post_id': { controller: 'PostController', action: 'readPostById', locals: { moment:

我正试图利用
moment.js
的优势,在sails应用程序下解析jade模板中的日期。 我已经读到,为了在视图服务器端使用
moment.js
,我必须使用
locals
的概念

因此,根据我的建议,我将我的路线修改为:

var moment = require("moment");
...
'get /post/:post_id': {
    controller: 'PostController',
    action: 'readPostById',
    locals: { moment: moment } // adding moment.js
},
但是当我试着用玉石的时候

...
- var date = moment().format('YYYY'); 
span= date
...
…我错误地说,时刻不是函数


我做错了什么?

您不能将类分配给本地人

在代码中

locals:{moment:moment}
它与
locals:{moment:moment.toString()}

因此,力矩的值将是

moment = "function utils_hooks__hooks() {
        return hookCallback.apply(null, arguments);
    }"
解决方案是,您需要在视图之外计算变量

locals: { currentYear: moment().format('YYYY') } 

我自己已经弄明白了。背后的原因是,在路由中定义
locals
与在
res.render()
上传递模板的参数相同。在我的例子中,我使用模板传递参数/数据,这似乎会覆盖使用
局部变量传递的内容

因此,如果要在模板中使用
,请在渲染时传递它,而不是使用
局部变量
,如下所示:

var moment = require("moment");
...
showPage: function(req, res) {
    res.render('page.jade', {moment: moment, other_data: "just to test"});
};

Does
span=moment().format('YYYY')工作?根据某种方式,我可以,因为sails会自动将lodash传递给所有视图。我认为这是因为lodash定义为全局,也许您可以将时刻导出为全局Too,也许如果您在
src/services
中创建服务,并使用时刻名称和返回时刻实例,您可以在视图中获取它!