2017-08-07 10 views
0

XHRリクエストを使用してバックエンドに電話をかけています。ここに私のフロントエンドのコードがあります:Express res.redirect()リダイレクトではなくHTMLを返す

var makeRequest = function(method, url, callback) { 
    var xhr = new XMLHttpRequest(); 
    xhr.onreadystatechange = function() { 
    if (xhr.readyState === 4 && xhr.status === 200) { 
     callback(xhr.responseText); 
    } 
    }; 
    xhr.open(method, url); 
    xhr.send(); 
} 

document.getElementById('button').addEventListener('click', function() { 
    makeRequest('GET', '/spotify', console.log); 
}); 

ここ/spotifyルートのための私のバックエンドのコードです:

const Querystring = require('querystring'); 

module.exports = (req, res) => { 
    const queries = Querystring.stringify({ 
    client_id: process.env.SPOTIFY_ID, 
    response_type: 'code', 
    redirect_uri: 'http://localhost:3000/redirect' 
    }); 
    res.redirect(`https://accounts.spotify.com/authorize?${queries}`); 
}; 

よりもむしろリダイレクトは、にリダイレクトされているページのHTMLは、XHR関数から返されます。ボタンをクリックせずに(localhost:4000/spotifyのようなものを介して)ルートに行くと、それは私が望むように動作し、リダイレクトされます。

これは何が起こっているのですか?

+0

ここではバッククックを使用しているようですか? => res.redirect( 'https://accounts.spotify.com/authorize?$ {クエリ}'); –

+0

どのような違いがありますか?それを使わずに試してみて、同じような行動を取る。 –

+0

@DavidR - [これは問題ではありません](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Template_literals) – Quentin

答えて

1

これは正常な動作です。

リダイレクトは、「あなたが求めたコンテンツはここにあります」を意味します。

リダイレクト "ブラウザはこのURLを新しいページとしてロードする必要があります"という意味ではありません。

XMLHttpRequestからリクエストを行いました。これは、XMLHttpRequestが応答を処理することを意味します。サーバーは他のURLからコンテンツを取得する必要があると言いました。そのため、XMLHttpRequestはそのURLを取得し、そのデータをresponseTextオブジェクトに提供しました。

+0

これは意味があります。要求がXHR要求から来た場合、バックエンドリダイレクトを行うことは可能ですか?私はXHRコールバックにデータを戻す前に、バックエンドで数回リダイレクトしたいと思います。 –

+0

「バックエンドリダイレクト」が何であるかわかりません。 XHRからのリクエストを検出する方法はありません。要求に余分なデータを入れて、別のパスを下ろすようにサーバーに指示することができます。 – Quentin

0

これは、通常のリクエストごとにXHRがリダイレクトを処理するためです。 通常のXHRリクエスト(JSコンソール内)をリダイレクトで応答するページに転送しようとすると、ブラウザはそのページにリダイレクトします.XHRリクエストか通常リクエストかは関係ありません。

関連する問題