天天看點

【nodejs之我的開源module】 使用express搭建web伺服器,代碼即文檔的實作。ting.js for 1.1.12 基于express的server工程化元件

前言

  都說nodejs适合制作restful_API,因為它有異步處理能力,能吞吐更多的請求,這一點是大家都認可的。前不久我使用nodejs+express+postgresql搭建了一個restful中間處理平台,感覺express的api在代碼量多的時候,顯得淩亂。然後我開發了一個能夠更好的組織express代碼的module,借鑒了一些java中的想法。希望達到一種平衡,一種更優雅的方式組織代碼。

express

  一個express項目的編碼流程,大概是幾步,

  1.初始化app (express())

  2.引入routes  引入路由,再由路由分發router

  3.定義router 

  4.編寫methods,get、post之類的響應

  5 前端請求

  

【nodejs之我的開源module】 使用express搭建web伺服器,代碼即文檔的實作。ting.js for 1.1.12 基于express的server工程化元件

  拿我自己的項目看,這是一個router:

var express = require("express");
var router = express.Router();
var config = require("config-lite");
var check = require("../lib/check");
var select = require("../db/select");

router.get("/",check,(req,res,next)=>{
    res.render("index",{
        pageName:"jiankong"
    })
});
      
router.post("/",check,(req,res,next)=>{
    res.send({
        msg:"jiankong"
    })
});      
module.exports = router;      

這裡面能有什麼問題?——當代碼量增大,各種app.get .post堆在一個檔案夾下,或者把這些拆分成大量檔案。這顯然不利于代碼的維護。

我的解決方案

  我需要解決編寫restful或者web應用時,代碼不容易了解的問題。 是以我寫了一個module:Ting.js

  我需要的特性:

  1.能夠根據代碼生成文檔

  2.代碼邏輯更清晰

  3.最好router能夠直接配置

經過半個多月的開發。現在我的代碼已經改造了我所有的項目。我認為它的代碼邏輯足夠清晰。比如router的定義:

module.exports = [
            {
                brie:"首頁",
                desc:"這是首頁的整體說明",
                path:"/",
                class:Home,
                rules:{   //對象
                    get:[    
                        {
                            brie:"這是首頁的get通路方法",
                            desc:"傳回了hello world",
                            path:"/",
                            controller:["getHome"]
                        }
                    ]
                }
            }
    ]      

這段代碼配置了一個path是/的router  其中它有一個get方法,處理函數是類Home的getHome方法。

感興趣?那看看下面的教程,運作一個demo試試

ting.js

ting.js for 1.1.12 基于express的server工程化元件

Ting.js簡述

Ting.js是一款基于express的server工程化元件,它的主要作用,在于簡化express的較繁雜router操作,使nodejs的server端API變得更加友好。附加功能可以實時生成路由文檔,使api請求一目了然,簡潔代碼的同時保持了express可擴充性能。

開始之前

在一切開始之前,你需要具備express知識,另外,需要生成一份package.json。

準備就緒後,就開始吧!

https://github.com/294678380/Ting.js#step-1%E4%B8%8B%E8%BD%BDexpress Step 1: 下載下傳express

你需要先下載下傳express:

項目目錄打開指令行運作 npm install express --save

https://github.com/294678380/Ting.js#step-2%E4%B8%8B%E8%BD%BDtingjs Step 2: 下載下傳ting.js

項目目錄打開指令行運作 npm install ting.js --save

https://github.com/294678380/Ting.js#step-3%E5%88%9B%E5%BB%BAindexjs Step 3: 建立index.js

入口檔案

const path = require("path");
        //引入express
        const express = require("express");
        //express_app
        var app = express();
        var ting = require("ting.js");
        //定義routes
        var routes = require("./routes");
        //引入_package
        var _package = require("./package.json");
            //doc路徑
            _package.doc.path = path.join(__dirname,_package.doc.path);
        //初始化
        var ting_fn = function(init){
            init(routes);
        }
        //生成路由
        ting(app,ting_fn,_package);
    //監聽
    app.listen(8090,()=>{
        console.log("ting_server started 8090");
    });      

https://github.com/294678380/Ting.js#step-4%E5%88%9B%E5%BB%BAroutesjs Step 4: 建立routes.js

配置routes規則

//處理類
    var Home = require("./home.class");
    //定義規則
    module.exports = [
            {
                brie:"首頁",
                desc:"這是首頁的整體說明",
                path:"/",
                class:Home,
                rules:{   //對象
                    get:[    
                        {
                            brie:"這是首頁的get通路方法",
                            desc:"傳回了hello world",
                            path:"/",
                            Examination:true,    //開啟代碼視圖
                            controller:["getHome"]
                        }
                    ]
                }
            }
    ]      

https://github.com/294678380/Ting.js#step-5%E5%88%9B%E5%BB%BAhomeclassjs Step 5: 建立home.class.js

替代複雜的router,使用類檔案作為請求入口

class Home{
        main(){
        }
        getHome(req,res,next){
            res.send("hello world");
        }
    }
    module.exports = Home;      

https://github.com/294678380/Ting.js#step-6%E8%BF%90%E8%A1%8C%E6%B5%8B%E8%AF%95 Step 6: 運作測試

項目目錄打開指令行運作

node index

通路localhost:8090

你可以看到類Home調用了getHome,順利傳回hello world,

它還可以生成文檔,在每次啟動時根據package中的version生成html文檔,配置方法在API中,也可以在我的gethub上的serverdemo中看到,位址附在資源一欄中。

總結

  我覺得ting.js還可以在doc上下功夫,比如用代碼标注方法,标注類,使用代碼添加注釋。另外配置檔案的方式,可以通過中間服務,達成多人開發的效果,這些是我以後想做的。不過現在還是希望有朋友給我送出幾個issues,完善現在的代碼

  https://github.com/294678380/Ting.js_server_demo/issues

資源

gethub:  https://github.com/294678380/Ting.js

API:  http://www.tingjs.top/api

一個demo的github: https://github.com/294678380/Ting.js_server_demo

========================================================

轉載請注明出處。