4

私のアプリでは、2つのルートを設定しています。

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

パラメータを指定しない場合、たとえばappurl.com(localhost:3000)にアクセスすると、デフォルトのユーザーが読み込まれるようにしたいと思いますが、param(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」です。

メインアプリから「username」を取り出して関数に残してみましたが、ルートからアクセスできないため、usernameが未定義になり、アプリが実行されません。ルートconsole.logを介して「ユーザー名」を吐き出すことができるので、それを割り当てることは問題ありませんが、expressjsを初めて使用するため、これをどのように行うべきかわかりません。私はインターネットを見回して考え、見つけることができるすべてを試しました。

また、これを行うためのより良い方法がある場合、または私が何か間違ったことをしている場合は、私に知らせてください。情報を省略した場合は、コメントを入力してください。対処しようと思います。

4

3 に答える 3

2

ルート用と指定された名前用の2つの異なるルートを設定することは可能ですか?2つの異なる関数にルーティングされるため、デフォルトの「/」ルートを介してデフォルトを設定するか、渡されたURLを介して:nameを取得するかを制御できます(:nameはreq.params.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...
};
于 2012-08-29T02:37:46.133 に答える
1

の即時関数呼び出しgetUser()が本当にルートの「後」である場合、要求を処理する前に、起動時に1回呼び出されます。artistユーザーがリクエストに名前を指定しない場合に使用されるデフォルト設定を確立するために、一度これを実行したいと思います。

getUser()その場合は、ユーザー名とコールバックをパラメーターとして受け取り、現在割り当てている値を使用してコールバックを呼び出すように書き直す必要がありますartist。初期化時に、デフォルトとして使用するユーザー名と、を設定するだけのコールバックを使用して呼び出しますartist。次に、bryanmacが提案した方法でルートを分割し、inを使用してartistinhome()を呼び出します。getUser()getNamed()

于 2012-08-29T03:33:57.213 に答える
-2

あなたの質問を理解したかどうかわかりません。

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

app.get('/:name', routes.index);
于 2012-08-29T02:43:39.713 に答える