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

前端之家收集整理的这篇文章主要介绍了javascript – 在ejs模板中获取url参数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试基于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%>?

我也用快递.

解决方法

您可以在第二个参数中轻松地将其作为对象传递给render()
app.get('/someurl',function(req,res,next) {
   res.render('filename',{query : req.query});
});

您也可以使用本地变量

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

当与在所有其他路由之前运行的一般路由一起使用时,这是非常有用的,使得变量可用于以下所有路由

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

   next();
});

它可以在您作为查询等渲染的文件中使用

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

作为旁注,如果没有定义查询某些原因,那么在EJS中会出现一个使用未定义变量的错误,这可能会令人讨厌.

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

app.user(function(req,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,条件也就失败了,它不会抛出一个错误,就像它自己或任何其他变量没有被定义一样.

猜你在找的JavaScript相关文章