更新:
最新的源碼和使用說明放到了github上 點(diǎn)擊跳轉(zhuǎn)
本文的重點(diǎn)在于restful接口的設(shè)計(jì)與實(shí)現(xiàn),使用到了express和monogoose.
點(diǎn)擊查看express教程
點(diǎn)擊查看monogoose教程
ES6入門教程----阮一峰的博客
node4.x對ES6的支持并不完善,建議使用更高版本的node
在實(shí)際開發(fā)中請?jiān)谖募^部添加"use strict"來聲明使用嚴(yán)格模式
為了有助于更好的理解后期的代碼,我們首先來學(xué)習(xí)一下ES6的類與繼承
1.定義與使用
//定義一個(gè)基類 class BaseService{ add(){ console.log("base add");// base add } remove(){ console.log("base remove") // base remove } } //實(shí)例化 var base = new BaseService(); base.add(); //輸出 "base add"
2.繼承
//重載基類的方法 //添加私有方法 class UserServie extends BaseService{ add(){ console.log("user add");// user add } findTop5(){ console.log("1,2,3,4,5");// 1,2,3,4,5 } }node的模塊
其次學(xué)習(xí)一下node里的模塊,如果要使用ES6的模塊,你需要額外使用babel
1.導(dǎo)出基類
新建baseService.js
class Service{ add(){ console.log("base add");// base add } remove(){ console.log("base remove") // base remove } } exports.service = Service;
2.在子類中引用基類
新建userService.js
var baseService = require("./baseService").service; class Service extends baseService{ findTop5(){ console.log("1,2,3,4,5");// 1,2,3,4,5 } add(){ console.log("user add");// user add } } exports.service = Service;搭建項(xiàng)目結(jié)構(gòu)
下面將會(huì)使用到monogoose和express相關(guān)技術(shù),不懂的可以看本文頂部鏈接
1.使用express初始化項(xiàng)目之后添加models文件夾和services文件夾
在models文件夾內(nèi)新建userModel.js
var mongoose = require("mongoose"); var Schema = mongoose.Schema; var model = new Schema({ name:String }); exports.model = mongoose.model("userModel", model);
在services文件夾內(nèi)新建baseService.js
var mongoose = require("mongoose"); var Schema = mongoose.Schema; class Service{ constructor(){ } add(obj, name,callback){ var name = name || ""; var result = {}; var instance = this.entity(obj); instance.save(function(err, item, numAffected) { if (err) { result = { "ok": false, "data": {}, "message": "新增" + name + "失敗" } } else { result = { "ok": true, "data": item, "message": "新增" + name + "成功" } } callback(result); }); } delete(obj, name,callback){ var result = {}; var id = obj.id; this.entity.remove({ "_id": id }, function(err) { if (err) { result = { "ok": false, "data": {}, "message": "刪除" + name + "失敗" }; } else { result = { "ok": true, "data": {}, "message": "刪除" + name + "成功" }; } callback(result); }); } } exports.service = Service;
然后新建userService.js,引用對應(yīng)的model,并且實(shí)現(xiàn)userService對baseService的繼承
var baseService = require("./baseService").service; var mongoose = require("mongoose"); var Schema = mongoose.Schema; var model = require("../models/userModel").model; class Service extends baseService{ constructor(){ super(); this.entity = model; } } exports.service = Service;
在userService.js中我們可以重寫基類的方法,也可以添加自己私有的方法和屬性
在上文中已經(jīng)提到過,下面再來熟悉一遍吧
如果要在子類中調(diào)用this,需要先調(diào)用super方法,否則新建實(shí)例時(shí)會(huì)報(bào)錯(cuò)。這是因?yàn)樽宇悰]有自己的this對象,而是繼承父類的this對象,然后對其進(jìn)行加工。如果不調(diào)用super方法,子類就得不到this對象。
class Service extends baseService{ constructor(){ super(); this.entity = model; } add(){ console.log("user add"); } findTop5(){ console.log("1,2,3,4,5"); } }
接著再新建services.js文件來統(tǒng)一對外導(dǎo)出service ,下面代碼是實(shí)際項(xiàng)目中的代碼,僅作為參照
exports.userService = require("./userService").service; exports.emptyService = require("./emptyService").service; exports.themeService = require("./themeService").service; exports.documentService = require("./documentService").service; exports.chartTypeService = require("./chartTypeService").service; exports.mapTypeService = require("./mapTypeService").service; exports.pageService = require("./pageService").service; exports.cellService = require("./cellService").service; exports.defaultEchartTypeService = require("./defaultEchartTypeService").service; exports.defaultMapTypeService = require("./defaultMapTypeService").service; exports.issueService = require("./issueService").service;
最后是路由了,在routes文件夾內(nèi)新建api.js文件
var express = require("express"); var router = express.Router(); var Services = require("../services/services"); mongoose.connect("mongodb://localhost/test"); /* listen all name 名稱 method 方法 par 參數(shù) entity 實(shí)體實(shí)例 service 服務(wù)實(shí)例 result 返回結(jié)果 obj 請求參數(shù) 參數(shù)為空或者錯(cuò)誤時(shí)調(diào)用empty 防止程序崩潰 */ router.post("/:name?/:method?/:par?",function(req,res,next){ var name = req.params.name || "empty"; var method = req.params.method || "empty"; var par = req.params.par || ""; var service = new Services[name+"Service"](); var obj = req.body || {}; obj.par = par; if(!Services[name+"Service"]){ service = new Services.emptyService(); } service[method](obj,name,function(result){ res.json(result); }); return; }); module.exports = router;
在代碼中,我們引用了Services,
首先通過new Services[name+"Service"]()來實(shí)例化對應(yīng)的service
然后調(diào)用service[method]方法,
其中:name?、:method?、:par? 為占位符
在前端頁面中,我們可以使用$.post("/api/user/add",data,function(){})這個(gè)典型的方法來測試一下API是否可以正常運(yùn)行,作者比較喜歡將參數(shù)全部放在data中
有疑問或者不解的可以發(fā)郵件到[email protected]
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/84514.html
摘要:在前面的節(jié)課程里面,我們已經(jīng)基本學(xué)習(xí)完了的知識(shí),達(dá)到基礎(chǔ)入門的要求。英語的直譯就是表現(xiàn)層狀態(tài)轉(zhuǎn)移。的特點(diǎn)不加密用戶可刪除可被修改依賴于用戶禁用或清除時(shí),讀取出錯(cuò)。下節(jié),會(huì)開始學(xué)習(xí)框架。 在前面的12節(jié)課程里面,我們已經(jīng)基本學(xué)習(xí)完了nodejs的知識(shí),達(dá)到基礎(chǔ)入門的要求。那為什么會(huì)在這節(jié)說下使用nodejs來實(shí)現(xiàn)一些功能,而不繼續(xù)往下講呢?原因有2:1.前面講地都是理論知識(shí),碼代碼比較少...
摘要:路由設(shè)計(jì)路由設(shè)計(jì)以用戶注冊為例介紹如何閉環(huán)用戶注冊開發(fā)注意點(diǎn)使用郵箱注冊驗(yàn)證郵箱是否注冊目前真實(shí)開發(fā)業(yè)務(wù)大部分都是手機(jī)號(hào)注冊,這塊由于沒有購買短信服務(wù)首先,在文件夾下新建上圖中對應(yīng)真實(shí)業(yè)務(wù)邏輯現(xiàn)附上業(yè)務(wù)實(shí)現(xiàn)代碼加密國際化工具類用戶服務(wù) 路由設(shè)計(jì) 路由設(shè)計(jì) 以用戶注冊為例介紹如何閉環(huán)用戶注冊開發(fā)注意點(diǎn):(1)使用郵箱注冊(2)驗(yàn)證郵箱是否注冊 【目前真實(shí)開發(fā)業(yè)務(wù)大部分都是手機(jī)號(hào)注冊,這塊...
摘要:采用前后端分離模式可以減后臺(tái)負(fù)擔(dān),加快研發(fā)效率,當(dāng)然,前提是前端能做好的話。還是基礎(chǔ)不夠?qū)е碌暮蠖耸欠耧L(fēng)格很多公司采用了前后端分離模式后,后端仍然采用以往的傳統(tǒng)風(fēng)格,這是不合理的,風(fēng)格的應(yīng)該是前后端分離的最佳實(shí)踐。 showImg(https://segmentfault.com/img/bVFC8f?w=690&h=360);早期的web開發(fā)是不分前端后端的?;ヂ?lián)網(wǎng)進(jìn)入Web2.0時(shí)...
摘要:采用前后端分離模式可以減后臺(tái)負(fù)擔(dān),加快研發(fā)效率,當(dāng)然,前提是前端能做好的話。還是基礎(chǔ)不夠?qū)е碌暮蠖耸欠耧L(fēng)格很多公司采用了前后端分離模式后,后端仍然采用以往的傳統(tǒng)風(fēng)格,這是不合理的,風(fēng)格的應(yīng)該是前后端分離的最佳實(shí)踐。 showImg(https://segmentfault.com/img/bVFC8f?w=690&h=360);早期的web開發(fā)是不分前端后端的?;ヂ?lián)網(wǎng)進(jìn)入Web2.0時(shí)...
摘要:采用前后端分離模式可以減后臺(tái)負(fù)擔(dān),加快研發(fā)效率,當(dāng)然,前提是前端能做好的話。還是基礎(chǔ)不夠?qū)е碌暮蠖耸欠耧L(fēng)格很多公司采用了前后端分離模式后,后端仍然采用以往的傳統(tǒng)風(fēng)格,這是不合理的,風(fēng)格的應(yīng)該是前后端分離的最佳實(shí)踐。 showImg(https://segmentfault.com/img/bVFC8f?w=690&h=360);早期的web開發(fā)是不分前端后端的。互聯(lián)網(wǎng)進(jìn)入Web2.0時(shí)...
閱讀 1711·2019-08-30 15:54
閱讀 3361·2019-08-26 17:15
閱讀 3565·2019-08-26 13:49
閱讀 2607·2019-08-26 13:38
閱讀 2325·2019-08-26 12:08
閱讀 3116·2019-08-26 10:41
閱讀 1397·2019-08-26 10:24
閱讀 3410·2019-08-23 18:35