視頻地址:https://www.cctalk.com/v/15114923889408
文章在前面幾節中,我們已經實現了項目中的幾個常見操作:啟動服務器、路由中間件、Get 和 Post 形式的請求處理等。現在你已經邁出了走向成功的第一步。
目前,整個示例中所有的代碼都寫在 app.js 中。然而在業務代碼持續增大,場景更加復雜的情況下,這種做法無論是對后期維護還是對患有強迫癥的同學來說都不是好事。所以我們現在要做的就是:『分梨』。
分離 router路由部分的代碼可以分離成一個獨立的文件,并根據個人喜好放置于項目根目錄下,或獨立放置于 router 文件夾中。在這里,我們將它命名為 router.js并將之放置于根目錄下。
修改路由 router.jsconst router = require("koa-router")() module.exports = (app) => { router.get("/", async(ctx, next) => { ctx.response.body = `index page
` }) router.get("/home", async(ctx, next) => { console.log(ctx.request.query) console.log(ctx.request.querystring) ctx.response.body = "HOME page
" }) router.get("/home/:id/:name", async(ctx, next)=>{ console.log(ctx.params) ctx.response.body = "HOME page /:id/:name
" }) router.get("/user", async(ctx, next)=>{ ctx.response.body = `
const Koa = require("koa") const bodyParser = require("koa-bodyparser") const app = new Koa() const router = require("./router") app.use(bodyParser()) router(app) app.listen(3000, () => { console.log("server is running at http://localhost:3000") })
代碼看起來清爽了很多。
然而到了這一步,還是不能夠高枕無憂。router 文件獨立出來以后,應用的主文件 app.js 雖然暫時看起來比較清爽,但這是在只有一個路由,并且處理函數也非常簡單的情況下。如果有多個路由,每個處理函數函數代碼量也都繁復可觀,這就不是主管們喜聞樂見的事情了。
接下來我們對結構進行進一步優化。
分離 controller 層我們把路由對應的業務邏輯也分離出來。新增 controller/home.js
新建 controller 文件夾,增加一個 home.js 文件,并從 router.js 中提取出業務邏輯代碼。
module.exports = { index: async(ctx, next) => { ctx.response.body = `index page
` }, home: async(ctx, next) => { console.log(ctx.request.query) console.log(ctx.request.querystring) ctx.response.body = "HOME page
" }, homeParams: async(ctx, next) => { console.log(ctx.params) ctx.response.body = "HOME page /:id/:name
" }, login: async(ctx, next) => { ctx.response.body = `
修改 router.js 文件,在里面引入 controler/home:
const router = require("koa-router")() const HomeController = require("./controller/home") module.exports = (app) => { router.get( "/", HomeController.index ) router.get("/home", HomeController.home) router.get("/home/:id/:name", HomeController.homeParams) router.get("/user", HomeController.login) router.post("/user/register", HomeController.register) app.use(router.routes()) .use(router.allowedMethods()) }
如此,將每個路由的處理邏輯分離到 controller 下的獨立文件當中,便于后期維護。
目前的代碼結構已經比較清晰了,適用于以 node 作為中間層、中轉層的項目。如果想要把 node 作為真正的后端去操作數據庫等,建議再分出一層 service,用于處理數據層面的交互,比如調用 model 處理數據庫,調用第三方接口等,而controller 里面只做一些簡單的參數處理。
分離 service 層這一層的分離,非必需,可以根據項目情況適當增加,或者把所有的業務邏輯都放置于 controller 當中。新建 service/home.js
新建 service 文件夾,并于該文件夾下新增一個 home.js 文件,用于抽離 controller/home.js 中的部分代碼:
module.exports = { register: async(name, pwd) => { let data if (name == "ikcamp" && pwd == "123456") { data = `Hello, ${name}!` } else { data = "賬號信息錯誤" } return data } }修改 controller/home.js
// 引入 service 文件 const HomeService = require("../service/home") module.exports = { // ……省略上面代碼 // 重寫 register 方法 register: async(ctx, next) => { let { name, password } = ctx.request.body let data = await HomeService.register(name, password) ctx.response.body = data } }重構完成
下一節我們將引入視圖層 views,還會介紹使用第三方中間件來設置靜態資源目錄等。新增的部分前端資源代碼會讓我們的用例更加生動,盡情期待吧。
下一篇:視圖nunjucks——Koa 默認支持的模板引擎
上一篇:iKcamp新課程推出啦~~~~~iKcamp|基于Koa2搭建Node.js實戰(含視頻)? HTTP請求推薦: 翻譯項目Master的自述: 1. 干貨|人人都是翻譯項目的Master 2. iKcamp出品微信小程序教學共5章16小節匯總(含視頻)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/90638.html
摘要:玩轉同時全面掌握潮流技術采用新一代的開發框架更小更富有表現力更健壯。融合多種常見的需求場景網絡請求解析模板引擎靜態資源日志記錄錯誤請求處理。結合語句中轉中間件控制權,解決回調地獄問題。注意分支中的目錄為當節課程后的完整代碼。 ?? ?與眾不同的學習方式,為你打開新的編程視角 獨特的『同步學習』方式 文案講解+視頻演示,文字可激發深層的思考、視頻可還原實戰操作過程。 云集一線大廠...
摘要:云集一線大廠有真正實力的程序員團隊云集一線大廠經驗豐厚的碼農,開源奉獻各教程。融合多種常見的需求場景網絡請求解析模板引擎靜態資源日志記錄錯誤請求處理。結合語句中轉中間件控制權,解決回調地獄問題。注意分支中的目錄為當節課程后的完整代碼。 ?? ?與眾不同的學習方式,為你打開新的編程視角 獨特的『同步學習』方式 文案講解+視頻演示,文字可激發深層的思考、視頻可還原實戰操作過程。 云...
POST/GET請求——常見請求方式處理 ?? iKcamp 制作團隊 原創作者:大哼、阿干、三三、小虎、胖子、小哈、DDU、可木、晃晃 文案校對:李益、大力萌、Au、DDU、小溪里、小哈 風采主播:可木、阿干、Au、DDU、小哈 視頻剪輯:小溪里 主站運營:給力xi、xty 教程主編:張利濤 視頻地址:https://www.cctalk.com/v/15114357765870 ...
視頻地址:https://www.cctalk.com/v/15114923888328 showImg(https://segmentfault.com/img/remote/1460000012744407?w=1602&h=966); 視圖 Nunjucks 彩虹是上帝和人類立的約,上帝不會再用洪水滅人。 客戶端和服務端之間相互通信,傳遞的數據最終都會展示在視圖中,這時候就需要用到『模板引擎...
視頻地址:https://www.cctalk.com/v/15114923886141 showImg(https://segmentfault.com/img/remote/1460000012840997?w=1604&h=964); JSON 數據 我顛倒了整個世界,只為擺正你的倒影。 前面的文章中,我們已經完成了項目中常見的問題,比如 路由請求、結構分層、視圖渲染、靜態資源等。 那么,J...
閱讀 2581·2021-11-22 12:01
閱讀 1105·2021-11-15 11:37
閱讀 3685·2021-09-22 14:59
閱讀 1746·2021-09-04 16:45
閱讀 1382·2021-09-03 10:30
閱讀 1013·2021-08-11 11:18
閱讀 2459·2019-08-30 10:53
閱讀 2013·2019-08-29 15:13