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

如何在EJS视图中使用枚举映射将整型状态值转为对应展示文本

EJS中使用状态枚举映射的实现方法

EJS 模板无法直接访问服务端通过 require 引入的模块变量,必须将需要用到的变量显式注入渲染上下文,以下是两种常用实现方案:

方案1:单页面路由传参

如果状态映射只在首页用到,直接在路由渲染时把 STATUS 对象传入模板即可:

  • 首先在路由文件顶部确保已经引入状态映射:
    const STATUS = require("./public/js/status");
    
  • 修改路由的 res.render 逻辑,正常分支和异常分支都要把 STATUS 加入传入的参数对象:
    app.get("/", async (req, res) => {
        try {
            db.open();
            const requests = await db.getRequestsByUserID(req.user.ID);
            db.close();
            res.render("index.ejs", { requests: requests, STATUS: STATUS });
        } catch (e) {
            console.log(`Error while showing requests: ${e}`);
            db.close();
            res.render("index.ejs", { 
                name: req.user.first_name, 
                requests: [], 
                error: "Cannot show requests",
                STATUS: STATUS
            });
        }
    });
    
  • 在EJS模板遍历请求列表时,直接通过状态值取映射的字符串即可:
    <ul class="request-list">
    <% requests.forEach(reqItem => { %>
      <li>
        <!-- 其他请求字段展示逻辑 -->
        <span class="status">状态:<%= STATUS[reqItem.status] %></span>
      </li>
    <% }) %>
    </ul>
    

方案2:全局注入(多页面复用推荐)

如果多个页面的模板都需要用到这个状态映射,不需要每个路由重复传参,直接在Express初始化阶段把映射挂载到 app.locals 上,所有EJS模板都可以直接访问该变量:

  • 在server.js中,完成express实例初始化后、注册路由前加入以下代码:
    const express = require('express');
    const app = express();
    const STATUS = require("./public/js/status");
    
    // 全局注入变量,所有EJS模板无需额外传参即可直接访问STATUS
    app.locals.STATUS = STATUS;
    
  • 注入完成后原有路由代码不需要做任何修改,模板里的写法和方案1完全一致。

小提示:如果数据库可能存在不在枚举范围内的异常状态值,可以给展示加个兜底,避免页面出现undefined:

<%= STATUS[reqItem.status] || "未知状态" %>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:03:24