在ejs模板中获取url参数
我试图创build一个基于URL参数的ejs条件,例如,如果testing参数存在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%>?
我也用快递。
你可以很容易地把它作为第二个参数中的对象render()
app.get('/someurl', function(req, res, next) { res.render('filename', {query : req.query}); });
你也可以使用locals
variables
app.get('/someurl', function(req, res, next) { res.locals.query = req.query; res.render('filename'); });
在与所有其他路由之前运行的通用路由一起使用时非常有用,使得所有以下路由中的variables可用
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中使用一个未定义的variables,这可能会令人讨厌的错误。
我通常通过使用一个对象来解决这个问题,因为检查对象属性不会触发错误,并且很容易确保对象始终在每个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
本身或任何其他variables没有定义错误。
<%= req.query.paramName %>
适用于我,其中paramName
是您的url查询参数的名称。