Expressjs路由参数作为主应用程序中的variables

对于我的应用程序,我有两个路线设置,

app.get('/', routes.index); app.get('/:name', routes.index); 

我希望如果我不指定一个参数,只要去appurl.com(本地主机:3000),它会加载一个默认的用户,但如果我指定一个参数(本地主机:3000 /用户),在下面的函数中使用它作为variables“username”(放在我的路由之后)。

 (function getUser(){ var body = '', username = 'WillsonSM', options = { host: 'ws.audioscrobbler.com', port: 80, path: '/2.0/?method=user.gettopartists&user=' + username + '&format=json&limit=20&api_key=APIKEYGOESHERE' }; require('http').request(options, function(res) { res.setEncoding('utf8'); res.on('data', function(chunk) { body += chunk; }); res.on('end', function() { body = JSON.parse(body); artists = body.topartists.artist; }); }).end(); })(); 

随着这个我有我的路线设置像这样:

 exports.index = function(req, res){ res.render('index', { title: 'LasTube' }); username = req.params.name; console.log(username); }; 

不幸的是,在那里设置用户名req.params.name似乎不能从主应用程序function访问。

我的问题是:如何设置expressjs / nodejs使用通过/名称的参数集合,只要使用默认 – 在这个例子中“WillsonSM”,如果不可用。

我已经尝试从主应用程序中取出“用户名”,只是将其留在函数中,但用户名变得未定义,因为它是从路由不可访问,应用程序将无法运行。 我可以通过console.log路由吐出“用户名”,所以在这里指定它并不是一个问题,但是因为我是expressjs的新手,所以我不知道该如何去做。 我已经试过了所有我能想到的,并从互联网上查找。

另外,如果有更好的方法做,或者我做错了,请让我知道。 如果我遗漏了任何信息,只要发表评论,我会尽力解决。

如果对getUser()的直接函数调用是真正的“在你的路由之后”,那么在你处理任何请求之前,它将在启动时被调用一次。 我猜你想要这样做一次为artistbuild立一个默认设置,如果用户在他们的请求中没有提供一个名字,这个设置将被使用。

如果是这样的话,你需要重写getUser()来获取一个用户名和一个callback参数,并用当前分配给artist的值调用callback函数。 在初始化时,使用任何你想使用的用户名作为默认值和一个只设置artist的callback。 然后按照bryanmacbuild议的方式拆分路由,使用home() artist并在getNamed()调用getUser() getNamed()

是否可以设置两个不同的路线 – 一个用于根目录,一个用于提供名称? 由于它路由到两个不同的function,你可以通过默认的“/”路由控制设置默认值,或者通过传入的URL(:name成为req.params.name)来获取:name。

 app.get('/', routes.home); app.get(':name', routes.getNamed); 

路线:

 exports.home = function(req, res) { username = "defaultUser"; // etc... }; exports.getNamed = function (req, res) { username = req.params.name; // etc... }; 

不知道我明白你的问题。

 app.get('/', function(req, res){ res.redirect('appurl.com'); }); app.get('/:name', routes.index);