node koa中轉層開發實踐總結

2022-08-30 14:03:17 字數 2302 閱讀 2660

node中轉層的意義:

1.能解決前後端**部署在不同伺服器下時的跨域問題。(實現)

2.合併請求,業務邏輯處理。(實現)

3.單頁應用的首屏服務端渲染。(暫未實現)

環境準備:

node: ^8.11.2

koa: ^2.6.1

koa-router: ^7.4.0

koa-bodyparser: ^4.2.1

const koa = require('koa');

const bodyparser = require('koa-bodyparser');

const apicontroler = require('./apicontroler');

global.hostname = "172.16.16.113";

global.port = 8070;

await next();

console.log(`process $ $...`);

});//使用路由處理中介軟體

在server目錄下新建業務介面目錄,本例目錄名為apicontrolers,拿登入模組為例,新建乙個login.js,裡面包含登入模組所需要的所有介面。(獲取驗證碼、登入、獲取選單許可權)

/*獲取圖形驗證碼*/

let getauthcoedfn = async (ctx, next) => ;

function asyncgetauthcode() ,(res)=> );

res.on('end', ()=> )

});req.on("error", (e)=> );

req.end();

})}/*登入*/

let loginfn = async (ctx, next) => ;

let logindata = await asyncpostlogin(authcodekey, json.stringify(postdata));

ctx.set("connection", "keep-alive");

ctx.body = json.parse(logindata);

next()

};function asyncpostlogin(authcodekey, postdata)

},(res)=> ).on('end', ()=> )

});req.on('error', (e)=> );

req.write(postdata);

req.end();

})}/*獲取選單及許可權列表*/

let getpowerlistfn = async (ctx, next) => ;

function asyncgetpowerlist()

},(res)=> ).on('end', ()=> )

});req.on("error", (e)=> );

req.end()

})}module.exports =

以介面功能宣告乙個函式,在此函式中通過node的http模組傳送請求。需要注意的是http.request請求獲取響應頭cookie的方式是tokenstr = res.headers['set-cookie']。

每乙個業務功能js最後暴露出內部所有以介面請求方式+介面位址為key,以對應功能函式為value的物件。

在server目錄下新建乙個apicontroler.js中介軟體(有返回值的函式)。此中介軟體的功能一是讀取apicontrolers目錄下的所有業務js,並引入;二是設定介面請求方式與執行函式的對映關係。

最後暴露出乙個函式返回所有請求介面路徑的集合。

apicontroler.js

const fs = require("fs");

function readapifiles(router, dir = '/apicontrolers') ).foreach(f => ...`);

});} if(url.startswith('get')) else if(url.startswith('post')) else`);}}}

module.exports = function (dir) ;

後續此例目前只能用作介面**、合併請求和解決跨域問題,終極目標是能解決spa(單頁應用的)首屏服務端渲染問題。

持續折騰中...

SpringBoot Angular開發實戰一

歪棗網採用前後臺分離設計模式,前端web採用開源的angular框架,後端採用springboot框架 redis快取。資料介面主要用到了 資料 歷史資料等介面。web整體設計介面如下,對技術有興趣的可以一起 交流。左側為選單樹,主要分為兩大類。右側主要為api介面資訊,介面資訊包括請求入參 返回引...

Android遊戲開發之旅(十四) 遊戲開發實戰一

從今天開始android123將開始帶領大家進入android遊戲開發實戰篇,本次我們首個遊戲為2d的基於su ceview的類似橫版卷軸遊戲。第一天我們說下需要做哪些準備 一 遊戲地圖編輯器,在j2me時代我們可能都是用gif分割多幀或bmp上放置多個通過減少檔案頭來壓縮體積,但是在android...

HAL層開發框架介紹

android hal 層即硬體抽象層是google響應廠家 希望不公開原始碼 的要求推出的概念 1,源 和目標位置 源 hardware libhardware目錄,該目錄的目錄結構如下 hardware libhardware hardware.c編譯成libhardware.so,目標位置為 ...