如何将变量从app.js传递给routes / index.js?

时间:2013-12-20 22:08:39

标签: node.js express shrinkroute

我正在使用shrinkroute https://npmjs.org/package/shrinkroute在nodejs中建立链接。我收到错误500 ReferenceError:未定义收缩器

如何将shrinkroute传递给routes / index.js?有没有更好的方法通过传递查询字符串args来创建URL?

//app.js
var app = express();

var shrinkr = shrinkroute( app, {
    "user": {
        path: "/user/:id?",
        get: routes.showOrListUsers
    }
});
//url method works in app.js    
var url = shrinkr.url( "user", { id: 5, page:40, type:'a' } );
console.log(url);

app.use( shrinkr.middleware );

//routes/index.js
exports.showOrListUsers = function(req, res, next) {                       
    console.log(req.params); 
    //shrinkr errors out in index.js                                      
    var url2 = shrinkr.url( "users", {name: "foo"});                       
    console.log(url2);                                                                         
}      

4 个答案:

答案 0 :(得分:27)

一种解决方案是使用app.set在您的应用对象中存储shrinkr

// app.js
...
app.set('shrinkr', shrinkr);
...

routes/index.js中,您可以通过req.appres.app个对象访问它:

exports.showOrListUsers = function(req, res, next) {
  var shrinkr = req.app.get('shrinkr');
  ...
};

答案 1 :(得分:7)

派对有点晚,但以下情况也有效:

<强> app.js

.myClass > table { background: red; }

同时在 route.js

var my_var = 'your variable';

var route = require('./routes/index')(my_var);
app.get('/', route);

答案 2 :(得分:1)

实现目标的两种简单方法:

1。从路径中访问shrinkroute实例

这很简单。设置Shrinkroute后无需任何其他操作。

exports.showOrListUsers = function(req, res, next) {
  var shrinkr = req.app.shrinkroute;
  console.log( "Route: " + req.route.name ); // ta-da, made available by Shrinkroute
  // do your URL buildings
};

2。使用中间件

如果您不想使用Shrinkroute的非URL构建方法,您可以使用中间件,它将为您提供路线和模板中的一些帮助(通过本地人):

// app.js
app.use( shrinkr.middleware );

// routes/index.js
exports.showOrListUsers = function(req, res, next) {
  console.log( "Route: " + req.route.name ); // ta-da, made available by Shrinkroute

  req.buildUrl( "users", { name: "foo" } );
  // or, if you want the full url with the scheme and host...
  req.buildFullUrl( "users", { name: "foo" } );
};

也许您也想在模板中使用它们?

// templates/index.jade
a( href=url( "users", { name: "foo" } ) ) Foo profile
a( href=fullUrl( "users", { name: "foo" } ) ) Foo profile

此方法的优点是您无法直接访问路径中的路径设置器。


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

答案 3 :(得分:0)

你应该导入它。将以下行添加到代码的最开头

  var shrinkroute = require('shrinkroute');