ejs里面怎么使用其他js文件里的功能?
发布于 7 年前 作者 xupeng086 7643 次浏览 最后一次编辑是 6 年前 来自 问答

在.ejs文件里,要格式化一个时间,我想使用一个common.js里的功能,应该怎么做呢? var common=require(“common.js”);//在ejs文件里能写这种代码吗? <%=common.dateFormat(dt) %>

6 回复

我也遇到了这个问题,折腾了大半天了 index.ejs: <%=((new Date()).Format(“yyyy-MM-dd”))%> <script src="/js/app.js"></script> <script type=“text/javascript”> alert(‘1’); </script>

app.js: Date.prototype.Format = function(formatStr) {…} 页面的js都加载到了, 在页面的控制台执行(new Date()).Format(“yyyy-MM-dd”)也没有问题, 改成<%=((new Date()).getFullYear())%>刷新页面也没有问题 就是自己定义的原型方法刷新页面不行。 求指点

模板渲染本质是服务器执行服务端代码给客户端提供渲染好的页面, 所以, 服务器并不知道客户端JS的任何代码函数, 服务器只认识服务端的JS函数, 通过路由后面的Controller控制渲染结果

服务器不认识任何客户端JS文件!!!(public里任何JS文件服务端都不认识)

所以,可以用express的app.locals({fun:fn()}),提供ejs等模板的函数

@zkaip 好的,我试一下,非常感谢

app.locals({a:fun(){}})没有成功,貌似提示locals不是函数。 但是app.locals.FormatDate = function(oridate,formatStr)这个是可以的, 另外我自己试下来,app.locals.Date.prototype.FormatDate=function以及Date.prototype.FormatDate=function也都是不行的, 虽然没有完美解决,不过好歹可以使用了。谢谢大牛@zkaip 的帮助~

@tianlmn 恩 我记错了 应该是 _.extend(app.locals, {})

@tianlmn app.locals对象上的方法是express可以在系统render时候使用的方法

回到顶部