【问题标题】:Getting the url parameters in an ejs template在 ejs 模板中获取 url 参数
【发布时间】:2013-12-06 12:18:24
【问题描述】:

我正在尝试基于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 参数?例如, 工作正常,是否有类似 的东西?

我也在用快递。

【问题讨论】:

    标签: javascript node.js express ejs


    【解决方案1】:

    您可以轻松地将它作为第二个参数中的对象传递给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');
    });
    

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

    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 中因使用未定义的变量而出现错误,这可能很烦人。

    我通常通过使用对象来解决这个问题,因为检查对象属性不会触发错误,并且很容易确保对象在每个 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 本身或任何其他变量那样抛出错误。

    【讨论】:

    • 另外,您可以在路由中间件之前有一个自定义中间件,如下所示:app.use(function (req, res, next) {res.locals.some_var='var';next();});。这样 var 将在所有视图中可用。用于传递req 数据,例如用于导航的 url 路径。
    【解决方案2】:
    <%= req.query.paramName %>
    

    对我有用,其中paramName 是您的 URL 查询参数的名称。

    【讨论】:

      【解决方案3】:

      只是以查询的形式发送的东西,可以很容易地检索到

      app.get('/category', function(req, res) {
        var string = stuff
        res.redirect('/?valid=' + string);
      }); 
      

      在ejs模板中可以直接使用参数名

      <% var k = valid %>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-01
        • 2021-02-12
        • 1970-01-01
        • 2021-10-22
        • 2023-03-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多