为什么 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>
成功了!!!
我一直在尝试在这个项目上完成这项工作,该项目是关于展示狗以供领养,其他所有路线都完美无缺,但这条 /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>
成功了!!!