对于我的应用程序,我有两个路由设置, app.get('/', routes.index);app.get('/:name', routes.index); 我希望它是如此,如果我没有指定一个参数,比如说只去appurl.com(localhost:3000),它会加载一个默认用户
app.get('/', routes.index); app.get('/:name', routes.index);
我希望它是如此,如果我没有指定一个参数,比如说只去appurl.com(localhost:3000),它会加载一个默认用户,但如果我指定一个参数(localhost:3000 / user) ),在下面的函数中使用它作为变量“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似乎无法从主应用程序功能访问.
我的问题是:如何设置expressjs / nodejs以在可用时通过/ name使用参数集,并且只使用默认值 – 在此示例中为“WillsonSM”(如果不可用).
我尝试从主应用程序中取出“用户名”,并将其留在函数中,但用户名变为未定义,因为它无法从路径中访问,并且应用程序将无法运行.我可以通过路由console.log吐出“用户名”,所以在那里分配它没有问题,但由于我是表达新手,我不知道我应该怎么做.我已经尝试了所有我能想到的东西并从环顾四周找到了.
此外,如果有更好的方法,或者我做错了,请告诉我.如果我遗漏了任何信息,只需发表评论,我会尽力解决.
如果对getUser()的立即函数调用确实在您的路径“之后”,则在您处理任何请求之前,它将在启动时被调用一次.我猜你想要这样做一次,为艺术家建立一个默认设置,如果用户没有在他们的请求中提供名字,将使用该设置.如果是这样,您需要重写getUser()以将用户名和回调作为参数,并使用您当前分配给艺术家的值调用回调.在初始化时,使用您要用作默认的任何用户名和仅设置艺术家的回调来调用它.然后按照bryanmac建议的方式拆分你的路线,在home()中使用artist并在getNamed()中调用getUser().