【问题标题】:Express res.redirect() returning HTML rather than redirecting表达 res.redirect() 返回 HTML 而不是重定向
【发布时间】:2018-01-14 23:40:33
【问题描述】:

我正在使用 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 之类的东西)就去路线,它会按我的意愿工作,并且我会被重定向。

任何想法为什么会发生这种情况?

【问题讨论】:

  • 您似乎在这里使用了反引号? => res.redirect(https://accounts.spotify.com/authorize?${queries});
  • 这会有什么不同?在没有的情况下尝试过并获得相同的行为。
  • @DavidR — That's not a problem

标签: javascript node.js express redirect xmlhttprequest


【解决方案1】:

这是正常的预期行为。

重定向意味着“您要求的内容在这里”。

重定向表示“浏览器应将此 URL 作为新页面加载”。

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

【讨论】:

  • 嗯,这很有道理。如果请求来自 XHR 请求,是否可以进行后端重定向?在将数据传回我的 XHR 回调之前,我想在后端重定向几次。
  • 我不知道什么是“后端重定向”。无法检测来自 XHR 的请求。你可以在请求中加入额外的数据,告诉服务器走另一条路。
【解决方案2】:

这只是因为 XHR 将重定向作为每个正常请求处理。 如果您尝试将正常的 XHR 请求(在您的 JS 控制台中)带到以重定向响应的页面,浏览器会将您重定向到该页面,无论这是 XHR 请求还是正常请求都没有关系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多