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

EJS部署动态站点触发"listnames未定义"ReferenceError报错

报错核心原因
  • 你调用res.render()时传入的渲染上下文是空对象:虽然在路由回调里定义了listnames局部变量,但没有把这个变量显式传递给EJS渲染流程。Express与EJS的渲染上下文是完全隔离的,路由回调里的局部变量不会自动暴露给模板,必须显式通过渲染参数传递,EJS模板执行时拿不到这个变量,自然直接触发未定义报错。
  • 硬编码全路径的写法偏离了Express视图引擎的工作规则,就算解决了传参问题,后续也会出现模板找不到、include路径无效的连锁错误。
  • 静态资源与视图路径的配置没有对齐当前项目的实际目录结构,后续加载CSS、图片资源时也会出现404。
分步修复步骤
  1. 补充Express视图路径配置
    在初始化Express应用的逻辑中,明确指定视图文件的查找根目录,替换原代码中硬编码的绝对路径:
    // 配置视图根目录为项目内的views文件夹
    app.set('views', __dirname + '/views');
    app.set('view engine', 'ejs');
    // 修正静态资源指向,匹配当前项目的实际目录
    app.use(express.static(__dirname));
    
  2. 修正路由的渲染传参与路径写法
    替换原根路由的实现:
    app.get('/', function(req, res){
        var listnames = ["Aras", "Songul", "Nafiz"];
        // 传相对视图根目录的模板路径,同时把listnames加入渲染上下文
        res.render('pages/index', {
            listnames: listnames
        });
    });
    
  3. 修正模板内的include路径
    打开views/pages/index.ejs文件,把原来硬编码的include绝对路径替换为相对视图根目录的写法:
    原代码:
    <% include('/home/debian/public/views/partials/so_header') %>
    修改为:
    <% include('partials/so_header') %>
  4. 优化服务启动的可观测性,把端口监听逻辑替换为:
    app.listen(8080, () => {
        console.log('服务已在8080端口启动');
    });
    
验证方法

修改完成后重新执行npm start,刷新浏览器访问对应地址,即可正常渲染动态列表内容,不会再抛出listnames is not defined的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 06:45:03