gpt4 book ai didi

javascript - 在 ejs 模板中获取 url 参数

转载 作者:IT老高 更新时间:2023-10-28 23:18:58 25 4
gpt4 key购买 nike

我正在尝试基于URL参数创建一个ejs条件,例如,如果测试参数存在于localhost:3000/page?test,则显示一个div,否则不显示。

我的 ejs 模板看起来像:

<% include header %>
<div class="row">
<%if (title !== "homepage") {%>
<%= title %>
<div>
<% include nav %>
</div>
<%}%>
<div>
</div>
</div>
<% include footer %>

有没有办法直接从 ejs 文件中访问 URL 参数?例如,<%= title %> 工作正常,是否有类似 <%= req.query %> 的东西?

我也在用 express 。

最佳答案

您可以轻松地将它作为第二个参数中的对象传递给 render()

app.get('/someurl', function(req, res, next) {
res.render('filename', {query : req.query});
});

你也可以使用 locals 变量

app.get('/someurl', function(req, res, next) {
res.locals.query = req.query;
res.render('filename');
});

当与在所有其他路线之前运行的一般路线一起使用时非常有用,使变量在所有以下 route 都可用

app.use(function(req, res, next) {
res.locals.query = req.query;
res.locals.url = req.originalUrl;

next();
});

并且它在您作为 query 等呈现的文件中提供

<% if (query == "something") { %>
<div id="crazy_shit">
<a href="<%- url -%>">Here</a>
</div>
<% } %>

作为旁注,如果由于某种原因未定义 query,您将在 EJS 中因使用 undefined variable 而出错,这可能很烦人。

我通常通过使用对象来解决这个问题,因为检查对象属性不会触发错误,并且很容易确保对象在每个 EJS 模板的顶部始终具有初始值。
在路由中是这样完成的

app.user(function(req, res, next) {
res.locals.stuff = {
query : req.query,
url : req.originalUrl
}

next();
});

然后在模板中

<% stuff = typeof stuff !== 'object' ? {} : stuff %>

// later on

<% if ( stuff.query == "something") { %>//does not throw error if property not defined
<div id="crazy_shit"></div>
<% } %>

即使定义了 stuff.query,条件也会失败,并且不会像 stuff 本身或任何其他变量那样抛出错误,没有定义。

关于javascript - 在 ejs 模板中获取 url 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20130960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com