当前位置: 首页 > 面试题库 >

使用Express时在EJS视图中查找当前URL

阎建德
2023-03-14
问题内容

我正在使用Express和EJS来提供页面。我正在为用户界面使用Bootstrap,尤其是导航栏。

我想'active'在当前页面的<li>项目中添加一个类,以显示当前页面。但是,我找不到如何从呈现页面的EJS代码中获取URL。

我发现了两种解决方法:我使用了将页面名称作为路由的参数传递的方法res.render('myview', {pageName: 'myView'});-这是不可扩展的,可能会导致问题。

另一种方法是在客户端使用jQuery 'active'在页面准备就绪时将类添加到项目中-但这意味着在每个视图上都包含此脚本+一些无用的客户端周期。

以前使用过几种服务器端渲染语言,我感觉好像缺少了一些东西。而且在线EJS文档并不是很好。

有什么办法可以从EJS代码中找到我当前的路径/ URL?

更新:
我采纳了前2条建议,并将视图名称作为参数传递给视图。我真的很喜欢@tandrewnichols的想法来自动计算它,但是最终,仅复制粘贴字符串就容易了:)


问题答案:

在我使用的几乎所有节点/表达模板语言中(ejs,kiwi,swig和jade),答案是否定的。我一直只是设置一个名为“
active”的变量,然后进行检查。正如您所说,这不是一个很好的答案,尽管我不知道可伸缩性是问题所在。如果每个url都呈现其自己的视图(或者即使您具有用于视图呈现的通用处理程序),则说起来也不难req.active = "Somepage"。另一种可能性是添加基于路由为您执行此操作的中间件。就像是

app.use(function(req, res, next){
    req.active = req.path.split('/')[1] // [0] will be empty since routes start with '/'
    next();
});

然后,只需确保具有相应导航组件的任何路由都使用唯一路径,例如

app.get('/students', ....)
app.get('/classes', ....)
app.get('/teachers', ....)
// etc.

编辑:为了回应您的评论,我总是将所有视图内容都放入一个对象密钥内req,通常我会使用我使用的任何模板程序来命名该密钥。所以我实际上可能会使用上面的示例进行设置req.ejs.active,然后执行

res.render('myview', req.ejs);

这种方法使将逻辑分离为多个中间件功能变得更加容易,而不必将巨大的匿名对象传递给res.render。



 类似资料:
  • 我只是想安装node.js/express/ejs.我知道ejs不是真正的超文本标记语言,所以我很难只显示一个简单的图像。有人能给我指出正确的方向吗? 目录结构为: 我的应用程序/服务器。js myApp/视图/索引。ejs myApp/徽标。jpg 现在我有 我走错方向了吗?谢谢

  • 问题内容: 注意 :我在帖子末尾自动回答 我正在尝试更好地体验nodeJS,我真的不喜欢将所有脚本都放在一个文件中。 所以,在这里发表文章之后,我使用这种结构 我的文件现在是: app.js enviroment.js routes.js layout.jade index / index.jade 我得到的错误是: 错误:无法在渲染(c:\ xampp \ htdocs)中在Function.r

  • 注意:我在帖子末尾的自动回答 我正在尝试更好地体验nodeJS,我真的不想把所有脚本都放在一个文件中。 所以,在这里的帖子后面,我使用这个结构 我的文件现在是: app.js 环境。js公司 路线。js公司 布局玉 索引/索引。玉 我得到的错误是: 错误:无法在函数处查找视图“索引/索引”。在ServerResponse的render(c:\xampp\htdocs\nodejs\bus\node

  • express-ejs-layouts Layout support for ejs in express Installation $ npm install express-ejs-layouts Example Check the example folder. git clone https://github.com/soarez/express-ejs-layouts.git cd ex

  • 我正在节点服务器上使用express ejs在多视图应用程序中呈现视图。在客户端,我使用的是AngularJS。初始视图是一个登录页面,当使用时,该页面会正确显示。我想在用户成功连接时呈现一个新的视图,但是对于下一个,它仍然停留在登录页面上,尽管我在客户端接收到了正确的HTML。下面是我的相关代码: 部分文件结构: server.js Script.js login.ejs Home.ejs 这是

  • 我有一个使用EJS模板的NodeJS、Express3应用程序。我有一个路线,使‘预览’一些表单字段包含HTML和CSS张贴。它只是将它们插入并呈现我的模板,如下所示。 我现在想做的是一个类似的路线,强制下载文件,而不是… 我看到有一个和,但是我如何将这些与我的EJS“预览”视图模板一起使用呢? 附注。-我也在使用Mikeal的是同一个应用程序。我想知道是否有一种方法,我可以使用管道到fs(文件系