end*_*cat 12 javascript ejs node.js express
我试图基于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 %>
Run Code Online (Sandbox Code Playgroud)
有没有办法直接从ejs文件访问URL参数?例如,<%= title%>工作正常,是否有类似<%= req.query%>的东西?
我也在使用快递.
ade*_*neo 13
您可以轻松地将其作为第二个参数中的对象传递给 render()
app.get('/someurl', function(req, res, next) {
res.render('filename', {query : req.query});
});
Run Code Online (Sandbox Code Playgroud)
您也可以使用该locals变量
app.get('/someurl', function(req, res, next) {
res.locals.query = req.query;
res.render('filename');
});
Run Code Online (Sandbox Code Playgroud)
当与在所有其他路由之前运行的常规路由一起使用时,这非常有用,使得变量在以下所有路由中都可用
app.use(function(req, res, next) {
res.locals.query = req.query;
res.locals.url = req.originalUrl;
next();
});
Run Code Online (Sandbox Code Playgroud)
它就是你呈现在文件中提供query等
<% if (query == "something") { %>
<div id="crazy_shit">
<a href="<%- url -%>">Here</a>
</div>
<% } %>
Run Code Online (Sandbox Code Playgroud)
作为旁注,如果query由于某种原因未定义,您将在EJS中使用未定义变量时出错,这可能很烦人.
我通常使用对象来解决这个问题,因为检查对象属性不会触发错误,并且很容易确保对象始终在每个EJS模板的顶部都有一个初始值.
这是在路线上这样做的
app.user(function(req, res, next) {
res.locals.stuff = {
query : req.query,
url : req.originalUrl
}
next();
});
Run Code Online (Sandbox Code Playgroud)
然后在模板中
<% stuff = typeof stuff !== 'object' ? {} : stuff %>
// later on
<% if ( stuff.query == "something") { %>//does not throw error if property not defined
<div id="crazy_shit"></div>
<% } %>
Run Code Online (Sandbox Code Playgroud)
即使stuff.query被定义,条件也会失败并且不会像它stuff本身或任何其他变量一样没有定义错误.
<%= req.query.paramName %>
Run Code Online (Sandbox Code Playgroud)
适用于我paramName的URL查询参数的名称.
| 归档时间: |
|
| 查看次数: |
19014 次 |
| 最近记录: |