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

数据库查询后Details EJS页面无法显示,出现404错误求助

问题排查与解决

1. 修正EJS模板的字段访问错误

你在details.ejs里犯了一个明显的字段访问错误:MongoDB文档的_id是唯一标识ID,不是包含title和body的对象,直接访问blog._id.title会导致模板渲染失败,进而可能触发页面异常。

修正后的模板代码:

<div class="details content">
    <h2><%= blog.title %></h2>
    <div class="content">
        <p><%= blog.body %></p>
    </div> 
    <a class="delete" data-doc="<%= blog._id %>">delete</a>
</div>

同时要处理查询不到文档的情况,避免blog为null时模板报错:

Blog.findById(id)
    .then(result => {
        // 若ID对应文档不存在,返回404页面
        if (!result) {
            return res.status(404).render('404', { title: 'Blog not found' });
        }
        res.render('details', { title: 'Blog details ', blog: result }); 
    })
    .catch(err  => {
        console.log(err);
        res.status(500).render('500', { title: 'Server Error' });
    });

2. 检查路由配置的顺序与路径

Express会按路由定义的顺序匹配请求,如果你的404兜底路由(比如app.get('*', ...))放在了详情页路由之前,会优先匹配404,导致正确的ID请求也返回404。

正确的路由顺序示例:

// 详情页路由:必须放在404路由之前
app.get('/blogs/:id', (req, res) => {
    const id = req.params.id;
    console.log(id); 
    Blog.findById(id)
        .then(result => {
            if (!result) {
                return res.status(404).render('404', { title: 'Blog not found' });
            }
            res.render('details', { title: 'Blog details ', blog: result }); 
        })
        .catch(err  => {
            console.log(err);
            res.status(500).render('500', { title: 'Server Error' });
        });
});

// 404兜底路由:必须放在所有路由最后
app.get('*', (req, res) => {
    res.status(404).render('404', { title: 'Page Not Found' });
});

另外要确认列表页的跳转链接路径和详情路由一致,比如跳转链接应该是:

<a href="/blogs/<%= blog._id %>">查看详情</a>

3. 验证数据库查询结果

在then回调里打印查询结果,确认是否真的获取到了文档:

.then(result => {
    console.log('查询到的博客:', result); // 查看控制台输出是否为null
    // 后续渲染逻辑
})

如果输出为null,说明该ID对应的博客不存在,这时候返回404页面是合理的;如果有结果但仍返回404,继续排查路由配置。

4. 确认模板文件路径

确保details.ejs放在了Express配置的模板目录下(默认是views/文件夹),如果模板文件路径错误,Express找不到模板也会触发页面异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 13:31:15