我一直试图在这个项目上进行这项工作,以显示要收养的狗,其他所有路径都可以正常工作,但是需要从我的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来为每个路线呈现不同的视图。
答案 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,则不检查默认路径/狗。在视图内部是否有目录默认值,您在其中具有狗把手模板。还要检查一下,然后告诉它是否可以解决您的问题