为什么 res.render() 不适用于 req.params.id?

Why is res.render() not working with req.params.id?

我一直在尝试在这个项目上完成这项工作,该项目是关于展示狗以供领养,其他所有路线都完美无缺,但这条 /dog/:id 需要我的 mongoDB 数据库中的 id 无法正常工作res.render().

res.render() 正在研究没有 req.params.id

的其他路线

正如您在下面的代码中看到的那样,使用此方法的行被注释掉了,这是我想要工作的行; res.send() 完美地工作,但我不知道为什么 res.render() 没有。谢谢!!!

router.route('/dog/:id')
.get(async (req, res) => {
    const id = req.params.id
    const adoption = await Adoption.findById(id)
        .populate('category');
    const categories = await Category.find();

    /* res.render('default/dog', { adoption: adoption, categories: categories }); */
    res.send(JSON.stringify(adoption));
});

顺便说一句,我使用 node.js 和 express 和 handlebars 来为每条路线呈现不同的视图。

我假设您有一个类似这样的视图目录和文件夹结构:

- routes
    | -- index.js
-config
    |-- config.js
- client
    |-- public
    |     | -- js
    |     | -- css
    |     | -- font
- views
    | -- dog.handlebars
    | -- layout
           | -- main.handlebars
- server.js

而在 server.js 中,您可能会像这样初始化车把:

 const hbs = exphbs.create({
        defaultLayout: 'main.handlebars',
        helpers: {....}
        })
app.engine('handlebars', hbs.engine);
app.set('view engine', 'handlebars');

如果是这种情况并且您这样做,您可以像这样用 'dog' 简单地调用 res.render:

res.render('dog', { adoption: adoption, categories: categories });

res.render 不能单独使用,还是您要同时呈现模板和发送响应?如果是这种情况,那么将首先呈现模板,然后发送 json 响应,因此看起来 express 没有呈现模板。

如果不是这种情况并且您只是 运行 res.render,那么请检查路径 default/dog。视图中是否有默认目录,您在其中获得了狗车把模板。也检查一下,然后判断它是否解决了您的问题

好的,所以在尝试弄清楚为什么这到底为什么不起作用之后,我发现了错误...它不是来自后端,而是一个未正确加载的脚本标签._。所以它只是前端的东西:

<script src="js/revolution.extension.actions.min.js"></script>

当不使用带有附加参数的路由时,它工作正常,但如果你想让它在每条路由上工作(我的意思是,简单的和带参数的)你必须包括 / 一开始,像这样:

<script src="/js/revolution.extension.actions.min.js"></script>

成功了!!!