表示res.redirect()返回HTML而不是重定向

时间:2017-08-07 15:36:26

标签: javascript node.js express redirect xmlhttprequest

我正在使用XHR请求拨打我的后端。这是我的前端代码:

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}`);
};

不是重定向,而是从XHR函数返回重定向到的页面的HTML。如果我在没有点击按钮的情况下前往路线(通过类似localhost:4000/spotify之类的东西),它可以按照我想要的方式工作,并且我被重定向。

为什么会发生这种情况?

2 个答案:

答案 0 :(得分:2)

这是正常和预期的行为。

重定向意味着“您要求的内容已在此处”。

重定向表示“浏览器应将此网址加载为新网页”。

您是从XMLHttpRequest发出请求的。这意味着XMLHttpRequest将处理响应。服务器说它应该从其他URL获取内容,因此XMLHttpRequest获取该URL并在其responseText对象中提供数据。

答案 1 :(得分:0)

这只是因为XHR处理每个正常请求的重定向。 如果您尝试将正常的XHR请求(在JS控制台中)发送到使用重定向响应的页面,则浏览器会将您重定向到该页面,无论这是XHR请求还是正常请求都无关紧要。