要在views / custom.ejs中使用MomentJS,正确的方法是什么(如果有的话)?
服务器端
路由/索引等我们可以轻松使用require('moment');
等,并且工作正常。
服务器端(EJS视图)
views / custome.ejs,<% var m = require('moment'); %>
之类的东西不起作用
我使用ExpressJS和EJS作为模板引擎。
答案 0 :(得分:53)
我找到了另一种方法,我认为它有一些优势。
在您的控制器上,或者view.js执行此操作:
var moment = require('moment');
exports.index = function(req, res) {
// send moment to your ejs
res.render('index', { moment: moment });
}
现在你可以在你的ejs里面使用片刻:
<html>
<h1><%= moment().fromNow() %></h1>
</html>
我不是节点专家,所以如果有人看到这样做有什么不好,请告诉我! :)
答案 1 :(得分:18)
还有一个选择:
这样您就可以将moment变量设置为您网站上任何EJS页面中所有脚本可用的本地变量。
在你的&#34; index.js&#34; (或&#34; app.js&#34;)文件执行此操作:(在您使用Express设置&#39;应用程序后)
var moment = require('moment');
var shortDateFormat = "ddd @ h:mmA"; // this is just an example of storing a date format once so you can change it in one place and have it propagate
app.locals.moment = moment; // this makes moment available as a variable in every EJS page
app.locals.shortDateFormat = shortDateFormat;
然后在您的EJS文件中,您可以将moment(和shortDateFormat)称为变量,如下所示:
<%= moment(Date()).format(shortDateFormat) %>
也许这稍微优雅一点?
答案 2 :(得分:10)
我在ejs上使用服务器端的时刻。我写了一个ejs过滤器函数,它将从现在返回。
npm install moment
./视图/ page.ejs
<span class="created_at"><%=: item.created_at | fromNow %></span>
./路由/ page.js
var ejs = require('ejs')
, moment = require('moment');
ejs.filters.fromNow = function(date){
return moment(date).fromNow()
}
答案 3 :(得分:8)
var moment = require('moment');
app.locals.moment = require('moment');
在视图中使用:
<%= moment(myDateValue).fromNow() %>
现在您可以在EJS文件中使用片刻。
答案 4 :(得分:2)
How about passing down require
like this:
res.render('index', { require: require });
You might need to tweak to maintain the path:
res.render('index', { require: module => require(module /* here you may insert path correction */) });
Obviously this works with Node (backend) only.
答案 5 :(得分:1)
上面提到的服务器端(EJS视图)在浏览器上运行,而不是在服务器上运行。您无法使用require,因为浏览器无法理解它。您需要导入moment.js才能使用它
<script src="/js/moment.min.js"></script>
答案 6 :(得分:1)
您可以创建该功能并将其附加到app.locals。并在服务器端的ejs模板中使用它。
在您的路线文件中
../路由/ page.js
var ejs = require('ejs')
, moment = require('moment');
app.locals.fromNow = function(date){
return moment(date).fromNow();
}
../视图/ page.ejs
<span class="created_at"><%= fromNow(item.created_at) %></span>
请记住将时刻添加到package.json文件
答案 7 :(得分:0)
我认为如果你想要添加一个中间件,你可以添加任何你想要的主题层,包括用户,配置和时刻,这是个好主意:
r8
答案 8 :(得分:0)
我写了一个助手来回复使用ejs
视图和布局的时刻。
./helpers/utils/get-moment.js
const moment = require('moment');
module.exports = {
friendlyName: 'formatMoney',
description: 'format money number.',
inputs: {},
sync: true,
exits: {},
fn: function (inputs, exits) {
return exits.success(moment);
}
};
然后使用:
const moment = sails.helpers.utils.getMoment();
答案 9 :(得分:0)
从Node v12.8.3开始,似乎您可以直接将require
传递给EJS模板,即可以使用:
const ejs = require('ejs')
let renderedHTML = ejs.render(`<% const moment = require('moment') %>`, { require })