簡體   English   中英

res.redirect() 在 express JS 中無法正常工作

[英]res.redirect() not working properly in express JS

我一直致力於為我制作的區塊鏈創建一個 API。

一切都很順利,直到我更新了 Node 和 Windows...

====== 問題 ====== 執行 POST 請求后,我無法再重定向到 GET 頁面。 (僅使用 Postman 還沒有前端)。

出於某種原因,它工作正常,現在我什至無法在一個簡單的測試文件中完成。

我在下面附上了簡單的快速測試文件(它重復了我的問題)。

const express = require("express");
const app = express();

app.get("/", (req, res) => {
  res.send("Hello World from GET!");
});

// BELOW IS THE WAY I'VE WORKED AROUND IT FOR NOW
// app.post("/", (req, res) => {
//   res.send("Hello World from POST!");
// });

app.post("/me", function (req, res) {
  res.redirect("/");  // ISSUE HAPPENS HERE
});

var server = app.listen(8081, () => {
  var port = server.address().port;
  console.log(`Example app listening at http://localhost:${port}`);
});

使用 PostMan,現在每當我嘗試在 app.post("/me") 之后重定向時,它都會返回如下所示的 404 錯誤...

<body>
    <pre>Cannot POST /</pre>
</body>

我發現如果我將 POST 方法添加到“/”路由(上面已注釋掉),它將正常工作。

為什么我以前不必這樣做??? 我把電腦弄壞了嗎? 哈哈

我嘗試卸載 Node v19 並重新安裝 Node v16。 (沒變化)

我卸載了重新啟動 Node v19 安裝時所做的 Windows 更新。

您的瀏覽器在重定向后發出POST /請求,您的應用程序不接受,它期望GET /請求。

POST 請求后的重定向是否導致 GET 請求或另一個 POST 請求取決於 HTTP 狀態(在 301 和 308 之間)以及瀏覽器。 也許 Windows 更新更改了瀏覽器的默認行為?

為避免歧義,您應該使用

app.post("/me", function (req, res) {
  res.redirect(303, "/");
});

另請參閱Google Apps 腳本為 POST 請求返回 405

更改設置

我在 PostMan 請求設置(正文和標題附近)中停用了“遵循原始 HTTP 方法”。

這解決了我的問題。 PostMan 正在對我的重定向執行另一個 POST 請求,而不是 GET。

點擊上面提供的 Heiko 鏈接,以及該頁面上關於更改 PostMan 設置的另一個鏈接,將我帶到了這個頁面......

https://makolyte.com/postman-follow-redirects-with-the-original-http-method-and-content-type/

我能夠禁用“Follow original HTTP Method”,它將在激活時“使用原始 HTTP 方法重定向,而不是使用 GET 重定向的默認行為”。

然而,這似乎是 PostMan 中每個請求的更改。

不確定到底是什么導致了這種情況發生,但它確實有效!

我還發現了位於屏幕底部的 PostMan 控制台。 這有助於調試問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM