在鏈接縮短網站上作業。站點在我的本地主機生產環境中按預期作業,但在我部署的 Digital Ocean Ubuntu Linux 服務器上啟用 Nginx 后,我似乎無法獲得帶有查詢引數的 Express GET 路由。
Node.js/Express GET 路由:
router.get("/:code", async (req, res) => {
try {
const url = await Url.findOne({ urlCode: req.params.code });
if (url) {
return res.redirect(url.longUrl);
} else {
return res.status(404).json("no url found");
}
} catch (error) {
console.error(error);
res.status(500).json("server error");
}
});
Nginx 組態檔(etc/nginx/sites-available/default):
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
server_name myname.com www.myname.com;
location / {
proxy_pass http://localhost:3000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_cache_bypass $http_upgrade;
}
如果我將 localhost 埠更改為我的 Express 服務器 (7777),GET 路由將使用 URL 查詢引數(即:http://example.com/random8chars),但 React 前端不會加載。
按照當前的配置(埠 3000/React 服務器),到“/:code”的 Postman GET 路由會回傳所需的結果,但是當我將轉換后的鏈接輸入到 Chrome 的 URL 欄中時,它會回傳默認的啟動頁面。事實上,當我在 Chrome 中輸入超出我的站點名稱的任何擴展程式時,它總是顯示默認啟動頁面。我知道這是 Nginx 的問題,但我似乎無法讓它作業。
一整天都在努力,無濟于事。發現多個 Stack Overflow 執行緒涉及該主題,但沒有任何效果。我嘗試向 Nginx 組態檔添加第二個位置路由,但無濟于事。我嘗試過的一個例子:
location /:code {
proxy_pass http://localhost:7777/:code;
}
請幫忙!我被卡住了,覺得我離讓它作業很近了。我將不勝感激任何有關解決此問題的見解。謝謝你。
uj5u.com熱心網友回復:
我只是添加評論,但我還沒有代表。所以在我看來 Nginx 正試圖提供另一個不存在的檔案。嘗試添加:
location / {
try_files $uri /index.html;
}
這將使 nginx 總是在忽略路徑的 rigth 檔案中嘗試。
uj5u.com熱心網友回復:
所以我終于解決了這個問題!我最初是從錯誤的角度處理這個問題的。看,在我的開發環境中,我在我的反應服務器上設定了一個代理,以將任何未知請求反彈到我的快速服務器。問題是,在 package.json 中設定的代理在生產環境中不起作用,這就是為什么我的鏈接縮短應用程式在開發中作業但在生產中沒有重復的原因。
這就是我解決它的方法:
我將 nginx 設定為指向我的 express 服務器 @ 埠 7777。我使用 npm build 命令將我的 react 應用程式匯出到 build 檔案夾,然后我設定了我的 express 服務器來為 build 檔案夾提供服務。就是這樣。當您訪問網站的默認 URL 時,它會加載 react build 檔案夾,然后當我輸入縮短的鏈接 (GET /:code) 時,它就像一個魅力。謝謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/328294.html
下一篇:PySpark和Kafka:org.apache.spark.SparkException。獲取JAR中的主類失敗,錯誤為'檔案檔案...不存在'。
