【nodejs之我的開源module】 使用express搭建web服務器,代碼即文檔的實現。


前言

  都說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 前端請求

  

  

 

  拿我自己的項目看,這是一個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。
准備就緒后,就開始吧!

 

Step 1: 下載express

你需要先下載express:
項目目錄打開命令行運行 npm install express --save

 

Step 2: 下載ting.js

你需要先下載express:
項目目錄打開命令行運行 npm install ting.js --save

 

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");
    });

 

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"]
                        }
                    ]
                }
            }
    ]

 

Step 5: 創建home.class.js

替代復雜的router,使用類文件作為請求入口

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

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM