摘要:方案選擇基礎(chǔ)框架請(qǐng)求服務(wù)代理轉(zhuǎn)發(fā)其余日志處理,路由,后端模板引擎,異步語(yǔ)法自己選擇了。
初衷:我并不想改變團(tuán)隊(duì)原有開(kāi)發(fā)模式,前端負(fù)責(zé)展現(xiàn)和界面路由,后端單純負(fù)責(zé)API;
要解決的問(wèn)題:
1.服務(wù)端渲染(部分界面【商品界面】需要使用服務(wù)器端渲染,但是管理類型界面并不需要服務(wù)器端渲染);
2.由于問(wèn)題1的出現(xiàn),所以我們需要服務(wù)器端渲染,需要控制路由,需要部分界面使用后端模板引擎。
3.當(dāng)然我不想寫(xiě)兩套api請(qǐng)求方式,Node.js可以搞定使用一套方案;
4.后臺(tái)服務(wù)請(qǐng)求當(dāng)然走代理服務(wù)。
方案選擇:
1.koa2基礎(chǔ)框架
2.axios--api請(qǐng)求服務(wù)
3.http-proxy--代理轉(zhuǎn)發(fā)
其余日志處理,路由,后端模板引擎,異步語(yǔ)法自己選擇了。
具體實(shí)現(xiàn)【僅供參考】:
1.代理轉(zhuǎn)發(fā)【寫(xiě)koa2中間件】:匹配請(qǐng)求路由代理轉(zhuǎn)發(fā)目標(biāo)服務(wù)器
//中間件request_proxy.js var httpProxy = require("http-proxy"); //EG:http://localhost:3001/rs-server-api/v1/goods/list var proxy = new httpProxy.createProxyServer({ target: "https://stage.recovery-server.jiahuyunyi.com/", changeOrigin: true // for vhosted sites, changes host header to match to target"s host }); var response_formatter = (ctx) => { proxy.web(ctx.req, ctx.res); ctx.body = ctx.res; } var url_filter = (pattern) => { return async (ctx, next) => { var reg = new RegExp(pattern); try { //通過(guò)正則的url進(jìn)行格式化處理 if (reg.test(ctx.originalUrl)) { response_formatter(ctx); } await next(); } catch (error) { //繼續(xù)拋,讓外層中間件處理日志 throw error; } } } module.exports = url_filter;
const request_proxy = require("./middlewares/request_proxy"); //匹配路由/rs-server-api/v1/ app.use(request_proxy("^/rs-server-api/v1/"));
2.后端服務(wù):當(dāng)然ajax請(qǐng)求也是用這個(gè)js
import axios from "axios"; //沒(méi)有權(quán)限直接跳轉(zhuǎn)到登錄界面 function fetchGoodsList() { return axios.get("http://localhost:3001/rs-server-api/v1/goods/list"); } export default { fetchGoodsList: fetchGoodsList }
在controller中調(diào)用服務(wù)
var router = require("koa-router")(); var Service = require("../services/index.js"); router.get("/", async function (ctx, next) { ctx.state = { title: await Service.fetchGoodsList().then((response) => { return JSON.stringify(response.data); }) }; await ctx.render("index", { }); }) module.exports = router;
最后項(xiàng)目DEMO地址,基于很多位前輩代碼,僅僅加入代理轉(zhuǎn)發(fā)
https://github.com/HereSincer...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/81389.html
摘要:洋蔥圈處理模型?;诘撵`活強(qiáng)大的中間件機(jī)制。參考官網(wǎng)提供的基本,不在贅述部分實(shí)現(xiàn),參考源碼分析常用服務(wù)端口監(jiān)聽(tīng)返回適用于方法的回調(diào)函數(shù)來(lái)處理請(qǐng)求。 本文 github 地址: https://github.com/HCThink/h-blog/blob/master/source/koa2/readme.md github 首頁(yè)(star+watch,一手動(dòng)態(tài)直達(dá)): https:...
摘要:但是這篇文章除去科普基本概念外,更重要的就是介紹中間件思想,并自己來(lái)實(shí)現(xiàn)一個(gè)服務(wù)端緩存中間件。 showImg(https://segmentfault.com/img/remote/1460000011043576); Express 作為 Node.js 的框架,如今發(fā)展可謂如日中天。我很喜歡其靈活、易擴(kuò)展的設(shè)計(jì)理念。尤其是該框架的中間件架構(gòu)設(shè)計(jì):使得在應(yīng)用中加入新特性更加標(biāo)準(zhǔn)化、...
摘要:實(shí)現(xiàn)的四大模塊上文簡(jiǎn)述了源碼的大體框架結(jié)構(gòu),接下來(lái)我們來(lái)實(shí)現(xiàn)一個(gè)的框架,筆者認(rèn)為理解和實(shí)現(xiàn)一個(gè)框架需要實(shí)現(xiàn)四個(gè)大模塊,分別是封裝創(chuàng)建類構(gòu)造函數(shù)構(gòu)造對(duì)象中間件機(jī)制和剝洋蔥模型的實(shí)現(xiàn)錯(cuò)誤捕獲和錯(cuò)誤處理下面我們就逐一分析和實(shí)現(xiàn)。 什么是koa框架? ? ? ? ?koa是一個(gè)基于node實(shí)現(xiàn)的一個(gè)新的web框架,它是由express框架的原班人馬打造的。它的特點(diǎn)是優(yōu)雅、簡(jiǎn)潔、表達(dá)力強(qiáng)、自由度...
摘要:實(shí)現(xiàn)的四大模塊上文簡(jiǎn)述了源碼的大體框架結(jié)構(gòu),接下來(lái)我們來(lái)實(shí)現(xiàn)一個(gè)的框架,筆者認(rèn)為理解和實(shí)現(xiàn)一個(gè)框架需要實(shí)現(xiàn)四個(gè)大模塊,分別是封裝創(chuàng)建類構(gòu)造函數(shù)構(gòu)造對(duì)象中間件機(jī)制和剝洋蔥模型的實(shí)現(xiàn)錯(cuò)誤捕獲和錯(cuò)誤處理下面我們就逐一分析和實(shí)現(xiàn)。 什么是koa框架? ? ? ? ?koa是一個(gè)基于node實(shí)現(xiàn)的一個(gè)新的web框架,它是由express框架的原班人馬打造的。它的特點(diǎn)是優(yōu)雅、簡(jiǎn)潔、表達(dá)力強(qiáng)、自由度...
閱讀 877·2021-11-24 09:38
閱讀 1102·2021-10-08 10:05
閱讀 2598·2021-09-10 11:21
閱讀 2814·2019-08-30 15:53
閱讀 1842·2019-08-30 15:52
閱讀 1981·2019-08-29 12:17
閱讀 3431·2019-08-29 11:21
閱讀 1623·2019-08-26 12:17