You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在EJS中调用Moment.js报错‘moment未定义’的技术求助

解决EJS中使用Moment.js报moment is not defined的问题

嘿,我来帮你搞定这个卡壳的问题!这个报错的核心原因其实是EJS的执行环境和你引入的前端Moment.js完全不是一回事!

问题根源

你在HTML里<head>或者</body>前加的Moment.js脚本,是运行在**浏览器(客户端)里的,而EJS模板是在服务器端(Node.js环境)**执行渲染的。服务器端的Node.js根本没加载Moment模块,所以当EJS尝试调用moment()时,自然会提示“未定义”。而你在控制台能正常用moment,是因为浏览器已经加载了前端的脚本,和服务器端的EJS渲染完全无关。

解决方案步骤

要让EJS能用上Moment.js,得在服务器端配置一下:

  1. 先在服务器项目里安装Moment.js模块
    打开终端,在你的项目根目录执行:
npm install moment
  1. 把Moment挂载到EJS的可访问范围内
    有两种方式,选一种就行:
  • 全局挂载(所有EJS页面都能直接用)
    在你的服务器入口文件(比如app.js或者server.js)里添加:
const moment = require('moment');
// 挂载到app.locals,这样所有EJS模板都能直接访问moment对象
app.locals.moment = moment;
  • 单个页面渲染时传入
    如果只需要在某个页面用,就在渲染该页面的路由里传入moment:
const moment = require('moment');
app.get('/你的页面路由', (req, res) => {
  res.render('你的EJS模板文件名', { moment: moment });
});
  1. 简化你的EJS模板代码
    现在不需要在模板里手动定义变量了,直接用就行:
<h1>Eduardo's Contact List</h1>
<p>Today is <%= moment().format("MMMM Do YYYY") %></p>

额外说明

如果之后你还需要在前端JS代码里用Moment.js,页面里的<script>标签可以保留,服务器端的Moment和前端的Moment是相互独立的,不会冲突。

内容的提问来源于stack exchange,提问作者Eduardo Rodriguez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:10:08