为什么res.render()无法与req.params.id一起使用?

时间:2019-12-21 21:20:31

标签: node.js mongodb express handlebars.js

我一直试图在这个项目上进行这项工作,以显示要收养的狗,其他所有路径都可以正常工作,但是需要从我的mongoDB数据库获取ID的/ dog /: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));
});

顺便说一句,我正在使用具有express和handlebar的node.js来为每个路线呈现不同的视图。

3 个答案:

答案 0 :(得分:1)

好吧,所以在试图弄清楚为什么它无法正常工作之后,我发现了错误...而且不是从后端来的,这是一个脚本标签未正确加载._。所以这只是前端的东西:

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

当不使用带有其他参数的路线时,它可以很好地工作,但是如果您想使其在所有路线上(我的意思是简单路线和带有参数的路线)都可以使用,则必须在<就像这样:

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

它奏效了!!! ?

答案 1 :(得分:0)

我假设您有一个这样的views目录和文件夹结构:

- 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 });

答案 2 :(得分:0)

res.render不能单独工作,还是您要渲染模板并同时发送响应?如果是这种情况,则将首先呈现模板,但随后将发送json响应,因此看起来express并未呈现模板。

如果不是这种情况,并且您只在运行res.render,则不检查默认路径/狗。在视图内部是否有目录默认值,您在其中具有狗把手模板。还要检查一下,然后告诉它是否可以解决您的问题