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

我正在使用shrinkroute https://npmjs.org/package/shrouroute在nodejs中build立链接。 我得到错误500 ReferenceError:收缩没有定义

如何将shrinkroute传递给routes / index.js? 有没有更好的方式来创buildurl传递查询string参数?

//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); } 

一个解决scheme是使用app.setshrinkr存储在应用程序对象中:

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

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

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

晚会有点晚,但下面的工作也是如此:

app.js

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

两个简单的方法来实现你想要的:

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.使用中间件

如果您不希望使用非URL的Shrinkroute构build方法,您可以使用中间件,这将在您的路线和模板(通过本地)中为您提供一些助手:

 // 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的作者。

你应该导入它。 在代码的最开始添加以下行

  var shrinkroute = require('shrinkroute');