如何将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.set
将shrinkr
存储在应用程序对象中:
// app.js ... app.set('shrinkr', shrinkr); ...
在routes/index.js
,可以通过req.app
或res.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');