2013-11-21 5 views
9

Я пытаюсь создать условие ejs на основе параметра URL, например, если тестовый параметр существует в localhost: 3000/page? Test, а затем показать div, иначе не показывать Это. ШаблонПолучение параметров url в шаблоне ejs

Моего EJS выглядит примерно так:

<% include header %> 
<div class="row"> 
<%if (title !== "homepage") {%> 
<%= title %> 
    <div> 
    <% include nav %> 
    </div> 
<%}%> 
    <div> 
    </div> 
</div> 
<% include footer %> 

Есть ли способ, чтобы получить доступ к параметрам URL непосредственно из EJS файла? Например, работает <% = title%>, есть ли что-то вроде <% = req.query%>?

Я также использую экспресс.

ответ

11

Вы можете передать его легко, как объект во втором аргументе 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 или любая другая переменная.

+1

Кроме того, перед промежуточным программным обеспечением маршрутизации может быть настроено промежуточное программное обеспечение: 'app.use (function (req, res, next) {res.locals.some_var = 'var'; next();}); '. Таким образом, var будет доступен во всех представлениях. Полезно передавать данные 'req', такие как URL-адрес для навигации. – diosney

5
<%= req.query.paramName %> 

работает для меня, где paramName это имя вашего параметра URL запроса.

+0

Это все, что мне нужно. Спасибо –

+1

В настоящее время он не работает ([email protected]) – alfredopacino

Смежные вопросы