如何在jade模板hrefs中嵌入shrinkroute url()调用?

时间:2013-10-10 21:23:30

标签: node.js express shrinkroute

如何翻译shrinkroute README文件中的示例:

// or views...
<a href="<%= url( "user", { id: 1 }) %>">User profile</a>
<a href="<%= fullUrl( "user", { id: 1 }) %>">User profile</a>

用于玉石模板? 例如,像

a(href="#{ url( "user", { id: 1 }) }") User profile

提前致谢。

2 个答案:

答案 0 :(得分:2)

这是从模板中调用函数的一般解决方案;请参阅@gustavohenke关于如何在玉石模板中使用shrinkroute的内置locals.buildFullUrl函数的特定解决方案的答案

// node.js
var url = require('url');
// Set up locals.shrinkUrl for every request
app.all('*', function(req, res, next){
  res.locals.shrinkUrl = function(path, queryObject){
    var out = url.format({
      pathname: path,
      query: queryObject,
    });
    return out;
  };
  next();
});

// template.jade
a(href=locals.shrinkUrl("user", {id: 1}) ) User profile

// rendered
<a href='/user?id=1'>User profile</a>

答案 1 :(得分:2)

首先,确保您使用的是shrinkroute中间件:

app.use( shrinkr.middleware );

它会自动为您提供以下帮助:

  • req.buildUrlres.locals.url - 为路径构建路径。与使用shrinkr.url()相同。
  • req.buildFullUrlres.locals.fullUrl - 为路线构建完整的网址。与使用shrinkr.fullUrl()相同。

在Jade中,您只需使用以下内容:

a(href=url( "user", { id: 1 } )) My Username
a(href=fullUrl( "user", { id: 1 } )) My Username

渲染输出:

<a href="/user/1">My Username</a>
<a href="http://localhost/user/1">My Username</a>

以上输出取决于您在shrinkroute实例中命名的路由。

免责声明:我是Shrinkroute的创作者。