javascript 使用nodejs express在fetch()调用后重定向

sg3maiej  于 2023-04-10  发布在  Java
关注(0)|答案(2)|浏览(207)

在POST FETCH调用后,我试图重定向到另一个URL。

fetch("/", { method: "POST", redirect: "follow" })
        .then((res) => {
          console.log(res);
})
        .catch(function (err) {
          console.info(err + " url: ");
});

后端是一个Express端点,具有如下简单的重定向,

var cors = require('cors');
app.use(cors());

app.post("/", (req, res) => {
  res.redirect("https://google.com");
});

我想在fetch调用解析promise后更改window.location,但调用失败,
CORS策略已阻止从源“http://localhost:3000”访问“https://google.com/”(从“http://localhost:3000/'重定向)的获取:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明响应满足您的需要,请将请求的模式设置为“no-cors”以在禁用CORS的情况下获取资源。
我知道这个错误是因为我访问google.com启用了CORS的www.example.com,不允许我获取数据,但我只是想能够重定向到该URL。是否有其他方法可以做到这一点?

7rtdyuoh

7rtdyuoh1#

AJAX 调用永远不会改变浏览器显示的网页。它们会向您的Javascript返回一个结果。如果服务器返回一个302,而您没有要求fetch()跟随重定向,那么您将得到302响应,您可以直接从该响应中读取位置标头。如果您确实要求fetch()跟随重定向(并且安全性允许),然后它会跟随重定向并将新页面的内容返回到您的Javascript。无论哪种方式,响应都会到达您的Javascript,并且不会更改浏览器中显示的内容。
如果您希望 AJAX 调用更改浏览器中显示的网页,则必须在JavaScript中将window.location设置为一个新的URL,该URL将从Ajax调用接收302重定向响应。

yyhrrdl8

yyhrrdl82#

你应该从客户端重定向,而不是从服务器端!
服务器端代码

app.post("/", (req, res) => {
  res.send(200);
});

客户端代码

fetch("/", { method: "POST" }).then((res) => {
    window.location.href = "https://google.com";
}).catch(function (err) {
    console.info(err);
});

相关问题