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

同一页面增改时EJS输入框无法渲染数据的问题排查

我帮你排查出两个关键问题,这就是你的三元运算符没生效的原因:

1. EJS模板语法错误

你在输入框的value属性里嵌套了EJS标签,这是不符合EJS语法规则的。EJS的<%= %>标签本身就是用来输出表达式结果的,不需要再在里面套一层<% %>。

错误写法:

<input type="text" class="form-control" name="landingTitle" value="<% result ? <%= result.landingTitle %> : '' %>" />

修正后的写法:

<input type="text" class="form-control" name="landingTitle" value="<%= result ? result.landingTitle : '' %>" />

这样就能正确判断result是否存在,存在就输出landingTitle,否则输出空字符串。

2. 后端查询的参数错误+ObjectId类型问题

你的后端代码里,查询条件用了topic_id,但这个变量根本没定义!应该用req.params.id来获取URL中:id部分的参数。另外,MongoDB中默认的_id是ObjectId类型,直接传字符串类型的req.params.id是匹配不到数据的,必须转换成ObjectId。

修正后的后端代码:

// 点击数据进行更新时
router.get("/display/:id", (req, res) => {
  // 引入ObjectId类型
  const { ObjectId } = require('mongodb');
  MongoClient.connect(
    process.env.ATLAS_URI,
    { useNewUrlParser: true },
    (err, db) => {
      if (err) {
        console.error('数据库连接错误:', err);
        return res.status(500).send('数据库连接失败');
      }
      const dbo = db.db("xxx");
      dbo
        .collection("xxx")
        // 把字符串id转换成ObjectId,同时用req.params.id获取URL参数
        .findOne({ _id: new ObjectId(req.params.id) }, (err, result) => {
          if (err) {
            console.error('数据查询错误:', err);
            return res.status(500).send('查询数据失败');
          }
          res.render("pages/dashboard", { result });
          db.close();
        });
    }
  );
});

额外建议

如果你的Node.js版本支持async/await,建议把回调写法改成async/await,这样代码更易读,错误处理也更简洁:

const { MongoClient, ObjectId } = require('mongodb');

router.get("/display/:id", async (req, res) => {
  let db;
  try {
    db = await MongoClient.connect(process.env.ATLAS_URI, { useNewUrlParser: true });
    const dbo = db.db("xxx");
    const result = await dbo.collection("xxx").findOne({ _id: new ObjectId(req.params.id) });
    res.render("pages/dashboard", { result });
  } catch (err) {
    console.error('错误:', err);
    res.status(500).send('操作失败');
  } finally {
    if (db) db.close();
  }
});

这样修改后,当你点击展示页面的某条数据时,对应的内容应该就能正确显示在输入框里了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:59:53