摘要:前端獲取數(shù)據(jù)時(shí)經(jīng)常會(huì)遇到跨域問題,用做反向代理就可以解決此問題。但是屬于中間件代理,不同開發(fā)者布署的服務(wù)器地址可能不一樣,這樣的配置就不能做到通用了。那能不能仿照寫了一個(gè)簡單的服務(wù)器,用于非的項(xiàng)目呢。
前端獲取數(shù)據(jù)時(shí)經(jīng)常會(huì)遇到跨域問題,用 nginx 做反向代理就可以解決此問題。但是 nginx 屬于中間件代理,不同開發(fā)者布署的 web 服務(wù)器地址可能不一樣,這樣 nginx 的配置就不能做到通用了。
如果能有一個(gè)客戶端代理,隨著項(xiàng)目源代碼提交,這樣就可以免去不同開發(fā)者的代理配置。webpack-dev-server 就是這樣的一個(gè)客戶端代理,但是如果項(xiàng)目沒有用到 webpack,那就沒辦法用了。那能不能仿照寫了一個(gè)簡單的 web 服務(wù)器,用于非 webpack 的項(xiàng)目呢。下面是代碼,望大佬們批評指正。
const request = require("request"); const express = require("express"); const path = require("path"); const app = express(); // 代理配置 const proxyTable = { "/api": { target: "http://localhost/api" } }; app.use(function(req, res,next) { const url = req.url; if (req.method == "OPTIONS") { console.log("options_url: ", url); // 設(shè)置cors 跨域 // res.header("Access-Control-Allow-Origin", req.headers.origin || "*"); // res.header("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With"); // res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS"); // 設(shè)置 cookie // res.header("Access-Control-Allow-Credentials", true); res.status(200).send("OK"); return; } // console.log("req_url: ", url); next(); }); // 設(shè)置靜態(tài)目錄 app.use(express.static(path.join(__dirname, "static"))); app.use("/", function(req, res) { const url = req.url; const proxy = Object.keys(proxyTable); let not_found = true; for (let index = 0; index < proxy.length; index++) { const k = proxy[index]; const i = url.indexOf(k); if (i >= 0) { not_found = false; const element = proxyTable[k]; const newUrl = element.target + url.slice(i+k.length); req.pipe(request({url: newUrl, timeout: 60000},(err)=>{ if(err){ console.log("error_url: ", err.code,url); res.status(500).send(""); } })).pipe(res); break; } } if(not_found) { console.log("not_found_url: ", url); res.status(404).send("Not found"); } else { console.log("proxy_url: ", url); } }); // 監(jiān)聽端口 const PORT = 8080; app.listen(PORT, () => { console.log("HTTP Server is running on: http://localhost:%s", PORT); });
PS:static 放靜態(tài)頁面
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/100533.html
摘要:既然前段工程化是基于,那么選擇做前后端分離部署也是理所應(yīng)當(dāng)?shù)?。有了這三個(gè)東西,我們就可以搭建出最簡單的前端服務(wù)器了。 前后端分離開發(fā)應(yīng)該已經(jīng)是很多公司的標(biāo)配了,然而,在前端工程化的體系下,開發(fā)環(huán)境代碼和生產(chǎn)環(huán)境代碼往往是平級的,不再是整個(gè)文件夾往服務(wù)器上一扔就了事,這讓每次的部署過程相當(dāng)繁瑣。 如下是常見的項(xiàng)目目錄: Project └──javaSrc └──app ...
摘要:安裝及線上環(huán)境配置安裝官方安裝說明地址執(zhí)行命令至此,安裝完成版本查看安裝官方文檔地址首次安裝執(zhí)行命令以后創(chuàng)建項(xiàng)目只需在你需要的路徑下執(zhí)行開發(fā)測試環(huán)境下直接執(zhí)行以下命令啟動(dòng)項(xiàng)目后面加上可以在修改現(xiàn)有文件后自動(dòng)進(jìn)行重啟瀏覽器輸入即可 centos+node.js+nest.js+caddy+pm2安裝及線上環(huán)境配置 node.js安裝 官方安裝說明地址 https://github.com...
摘要:創(chuàng)建成功后進(jìn)入文件夾執(zhí)行執(zhí)行作用創(chuàng)建文件,維護(hù)項(xiàng)目的依賴文件解釋創(chuàng)建文件執(zhí)行作用用系統(tǒng)的編輯器打開文件。我的技術(shù)新群上一篇前后端分離項(xiàng)目實(shí)踐分析下一篇公司項(xiàng)目實(shí)踐 一、前言 前端如何獨(dú)立用nodeJs實(shí)現(xiàn)一個(gè)簡單的注冊、登錄功能,是不是只用nodejs+sql就可以了?其實(shí)是可以實(shí)現(xiàn),但離實(shí)際應(yīng)用還有距離,那要怎么做才是實(shí)際可用的。 網(wǎng)上有很多nodeJs的示例,包括和 sql /...
摘要:當(dāng)然需要的工具不只有這些,其他的一些可選工具還有文件壓縮壓縮時(shí)用到的文件重命名檢查一般編輯器自帶校驗(yàn)提示工具等等,具體根據(jù)項(xiàng)目需要安裝。 gulp 前端自動(dòng)化構(gòu)建工具 需要配置nodejs環(huán)境, 利用npm安裝全局gulp,安裝后可以輸入gulp指令。 npm install gulp -g 創(chuàng)建項(xiàng)目目錄、初始化npm包、gulp npm init gulp init 下載gul...
摘要:連接數(shù)據(jù)庫如果不自己創(chuàng)建默認(rèn)數(shù)據(jù)庫會(huì)自動(dòng)生成地址跟第一步的地址對應(yīng)?,F(xiàn)在回過頭來看里面的入口文件最后,我們在瀏覽器輸入,就會(huì)跳到。到此為止,我們就完成了整個(gè)前后端各自開發(fā)到正式部署的流程。 一個(gè)完整的網(wǎng)站服務(wù)架構(gòu)包括:1、web frame ---這里應(yīng)用express框架2、web server ---這里應(yīng)用nodejs3、Database ---這里應(yīng)用monggoDB4、...
閱讀 4211·2021-11-22 13:53
閱讀 3780·2021-11-19 11:29
閱讀 1651·2021-09-08 09:35
閱讀 3420·2020-12-03 17:26
閱讀 652·2019-08-29 16:06
閱讀 2293·2019-08-26 13:50
閱讀 1331·2019-08-23 18:32
閱讀 2324·2019-08-23 18:12