前言
都說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。
準備就緒後,就開始吧!
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
========================================================
轉載請注明出處。