Getting the url parameters in an ejs template

≯℡__Kan透↙ 提交于 2019-12-03 03:21:24

You can pass it easily as an object in the second argument to render()

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

You can also use the locals variable

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

which is very useful when used with a general route that runs before all the other routes, making the variable available in all the following routes

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

   next();
});

and it's available in the file you're rendering as query etc

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

As a sidenote, if query for some reason isn't defined, you'll get an error in EJS for using an undefined variable, which can be annoying.

I usually solve this by using an object instead, as checking object properties does not trigger errors, and it's easy to make sure the object always has an initial value at the top of each EJS template.
It's done like this in the routes

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

   next();
});

And then in the template

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

// later on

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

which even if stuff.query is defined, the condition just fail and it doesn't throw an error like it would if stuff itself, or any other variable, wasn't defined.

<%= req.query.paramName %>

Works for me where paramName is the name of your URL query parameter.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!