在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}); }); 

你也可以使用localsvariables

 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查询参数的名称。