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



我一直在尝试在这个关于展示狗以供收养的项目中完成这项工作,其他所有路线都运行良好,但是这个需要来自我的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));
});

顺便说一下,我正在使用带有快速和车把的 node.js 来渲染每条路线的不同视图。

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

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

当不使用带有附加参数的路由时,它可以正常工作,但如果你想让它在每条路线上工作(我的意思是,简单的路线和带有参数的路线(,你必须在一开始就包含/,如下所示:

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

它奏效了!! 🥳

我假设你有一个视图目录和文件夹结构

,如下所示:
- routes
| -- index.js
-config
|-- config.js
- client
|-- public
|     | -- js
|     | -- css
|     | -- font
- views
| -- dog.handlebars
| -- layout
| -- main.handlebars
- server.js

在服务器中.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,请检查路径默认值/狗。视图中是否有一个目录默认值,您可以在其中获得狗车把模板。还要检查一下,然后判断它是否解决了您的问题

最新更新