更新:
最新的源碼和使用說明放到了github上 點擊跳轉
本文的重點在于restful接口的設計與實現,使用到了express和monogoose.
點擊查看express教程
點擊查看monogoose教程
ES6入門教程----阮一峰的博客
node4.x對ES6的支持并不完善,建議使用更高版本的node
在實際開發中請在文件頭部添加"use strict"來聲明使用嚴格模式
為了有助于更好的理解后期的代碼,我們首先來學習一下ES6的類與繼承
1.定義與使用
//定義一個基類 class BaseService{ add(){ console.log("base add");// base add } remove(){ console.log("base remove") // base remove } } //實例化 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的模塊
其次學習一下node里的模塊,如果要使用ES6的模塊,你需要額外使用babel
1.導出基類
新建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;搭建項目結構
下面將會使用到monogoose和express相關技術,不懂的可以看本文頂部鏈接
1.使用express初始化項目之后添加models文件夾和services文件夾
在models文件夾內新建userModel.js
var mongoose = require("mongoose"); var Schema = mongoose.Schema; var model = new Schema({ name:String }); exports.model = mongoose.model("userModel", model);
在services文件夾內新建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,引用對應的model,并且實現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中我們可以重寫基類的方法,也可以添加自己私有的方法和屬性
在上文中已經提到過,下面再來熟悉一遍吧
如果要在子類中調用this,需要先調用super方法,否則新建實例時會報錯。這是因為子類沒有自己的this對象,而是繼承父類的this對象,然后對其進行加工。如果不調用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文件來統一對外導出service ,下面代碼是實際項目中的代碼,僅作為參照
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文件夾內新建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 參數 entity 實體實例 service 服務實例 result 返回結果 obj 請求參數 參數為空或者錯誤時調用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"]()來實例化對應的service
然后調用service[method]方法,
其中:name?、:method?、:par? 為占位符
在前端頁面中,我們可以使用$.post("/api/user/add",data,function(){})這個典型的方法來測試一下API是否可以正常運行,作者比較喜歡將參數全部放在data中
有疑問或者不解的可以發郵件到http_wenwen@163.com
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/84514.html
摘要:在前面的節課程里面,我們已經基本學習完了的知識,達到基礎入門的要求。英語的直譯就是表現層狀態轉移。的特點不加密用戶可刪除可被修改依賴于用戶禁用或清除時,讀取出錯。下節,會開始學習框架。 在前面的12節課程里面,我們已經基本學習完了nodejs的知識,達到基礎入門的要求。那為什么會在這節說下使用nodejs來實現一些功能,而不繼續往下講呢?原因有2:1.前面講地都是理論知識,碼代碼比較少...
摘要:路由設計路由設計以用戶注冊為例介紹如何閉環用戶注冊開發注意點使用郵箱注冊驗證郵箱是否注冊目前真實開發業務大部分都是手機號注冊,這塊由于沒有購買短信服務首先,在文件夾下新建上圖中對應真實業務邏輯現附上業務實現代碼加密國際化工具類用戶服務 路由設計 路由設計 以用戶注冊為例介紹如何閉環用戶注冊開發注意點:(1)使用郵箱注冊(2)驗證郵箱是否注冊 【目前真實開發業務大部分都是手機號注冊,這塊...
閱讀 1682·2019-08-30 15:54
閱讀 3332·2019-08-26 17:15
閱讀 3522·2019-08-26 13:49
閱讀 2582·2019-08-26 13:38
閱讀 2291·2019-08-26 12:08
閱讀 3035·2019-08-26 10:41
閱讀 1369·2019-08-26 10:24
閱讀 3376·2019-08-23 18:35