使用express,MongoDb快速构建Node.js REST API (PPT)
网络应用-重前端轻后端模式,后端专注于业务,提供前端数据接口。一套API给多客户端提供服务
RESTful(Representational State Transfer)-表现层状态转化
-
每一个URI代表一种资源。为所有“事物”定义ID
-
客户端和服务器之间,传递这种资源的某种表现层。
-
客户端通过四个HTTP动词(GET、POST、PUT、DELETE),对服务器端资源进行操作,实现"表现层状态转化"。
####1. 网址中不能有动词,只能有名词,所用的名词往往与数据库的表格名对应。 ####2. 对于资源的具体操作类型,由HTTP动词表示。 * GET: 从服务器取回一个资源 * POST: 在服务器新建一个资源 * PUT: 更新已经存在的资源(客户端提供改变后的完整资源) * PATCH:在服务器更新资源(客户端提供改变的属性) * DELETE: 删除一个服务器资源
##### 简单设计的案例
* GET /tickets 取回门票的列表
* GET /tickets/:id 取回一个指定门票
* POST /tickets 创建一张新的门票
* PUT /tickets/12 更新一张指定门票的信息
* PATCH /tickets/12 部分更新一张指定门票的信息
* DELETE /tickets/12 删除一张指定门票的所有信息
####3. 过滤(filtering)
网址后提供参数,如:
- /api/docs/?limit = 6 指定返回6个文档
- /api/docs/?limit = 6&order = asc 指定返回6个文档并按升序排序
####4. 行为(action)
当做子资源对待。例如:github上,对一个gists加星操作:PUT /gists/:id/star 并且取消星操作:DELETE /gists/:id/star.
####客户端浏览器方面:
由于历史原因,目前浏览器的
标签只支持GET和POST,但是通过ajax技术,几乎所有的主流浏览器都支持GET/POST/PUT/DELETE这4个方法,测试代码如下:$.ajax({url:'/rest',type:'put',success:function(data){
alert("浏览器支持PUT:"+data);
}});
$.ajax({url:'/rest',type:'delete',success:function(data){
alert("浏览器支持DELETE:"+data);
}});
####服务器端:
express的router模块实现了router.METHOD支持router.get,router.post,router.put,router.delete等方法。 ##使用express,MongoDb快速构建Node.js REST API
对nodejs的核心模块http进行封装,实现了app,router,response,request模块,提供可扩展的中间件机制
- 连接数据库(mysql,mongodb,redis)
-
定义中间件(错误处理,静态文件路径)
-
设置并引入路由
http请求过程中对请求进行处理的函数。
一个http的处理过程就好比污水处理,express的中间件就好比一层层的过滤网。
文档式Nosql数据库
* mongod: 启动MongoDb数据库
* mongo: 进入控制条
* show dbs: 显示数据库列表;
* use db_name: 切换数据库;
* db.dropDatabase(): 删除当前使用的数据库;
* show tables/collections: 显示数据库中所有的表;
* db.collection_name.find(query):对某一个表进行查找;
* db.collection_name.findOne(query):找出一条满足条件记录;
* db.collection_name.insert(document):插入一条记录;
* db.collection_name.save(document):保存一条记录;
* db.collection_name.update(query,{$set:data}):更新一条记录;
* db.collection_name.remove(query):插入一条记录;
* printjson(document)
将数据库抽象成原生语言可操作对象操作的方法
工作流程: 每个请求进来,首先进入controller,controller调用service里面的操作拼装数据,然后发给前端。
-
colleges(学院)
name: String, picture: String, meta:{ createAt:{ type: Date, default: Date.now() }, updateAt:{ type: Date, default: Date.now() } } ``` 2. courses(课程)
name: String,
type: String,
college: ObjectId,
picture: String,
download: Number,
meta:{
createAt:{
type: Date,
default: Date.now()
},
updateAt:{
type: Date,
default: Date.now()
}
}
- docs(文档)
name: String,
fileType: String,
course: ObjectId,
courseType: String,
college: ObjectId,
link: String,
download: Number,
meta:{
createAt:{
type: Date,
default: Date.now()
},
updateAt:{
type: Date,
default: Date.now()
}
}
- users(用户)
name: String,
email: String,
password: String,
meta:{
createAt:{
type: Date,
default: Date.now()
},
updateAt:{
type: Date,
default: Date.now()
}
}