我正在使用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);
}
答案 0 :(得分:27)
一种解决方案是使用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');
...
};
答案 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)
实现目标的两种简单方法:
这很简单。设置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
};
如果您不想使用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');