目录
- mongoose
- scheme
- model
- 语法使用
- 接口
- 定义
- 开发规范 Restful API
- 测试工具
- express
- 添加学生的接口
- 添加学生列表的接口
- 添加学生列表分页的接口
- 接口文档 开发 apiDoc
mongoose
node中操作MongoDB数据库的模块,实现增删改查的操作。
scheme
约束MongoDB的文档数据。scheme对应文档
model
model对应集合
语法使用
打开mongodb服务器
npm install mongoose
创建a.js
var mongoose = require('mongoose');
// 数据库连接
var db = mongoose.createConnection('mongodb://stu2:stu2@localhost:27017/school',
{ useNewUrlParser: true, useUnifiedTopology: true }, err => {
if (err) {
console.log('-------------------------');
console.log('数据库连接失败', err);
console.log('-------------------------');
return;
}
console.log('数据库连接成功');
}
)
// 创建model===集合
const model = db.model('users', {
name: { type: String, default: "大神" },
pwd: { type: String, default: "pwd大神" },
age: { type: Number },
sex: { type: String }
})
// 准备插入数据
const insertObj = new model({
name: "张安",
pwd: "张安",
age: 18,
sex: "男"
})
// 增 create
insertObj.save()
.then(res => {
console.log(res)
return res
})
.catch(err => {
console.log("插入失败" + err)
return false;
})
运行
PS F:\express_mongodb_lagou> node a.js
数据库连接成功
{
name: '张安',
pwd: '张安',
_id: 5f44f19c5b67fd3350848d2f,
age: 18,
sex: '男',
__v: 0
}
结果
创建b.js
var mongoose = require('mongoose');
var db = mongoose.createConnection('mongodb://stu2:stu2@localhost:27017/school',
{ useNewUrlParser: true, useUnifiedTopology: true }, err => {
if (err) {
console.log('-------------------------');
console.log('数据库连接失败', err);
console.log('-------------------------');
return;
}
console.log('数据库连接成功');
}
)
const model = db.model('users', {
name: { type: String, default: "大神" },
pwd: { type: String, default: "pwd大神" },
age: { type: Number },
sex: { type: String }
})
// 读取的方法 Read
model.find({})
.then(res => {
console.log(res)
return res
})
.catch(err => {
console.log(err)
return false
})
运行
PS F:\express_mongodb_lagou> node b.js
数据库连接成功
[
{
name: '张安',
pwd: '张安',
_id: 5f44f19c5b67fd3350848d2f,
age: 18,
sex: '男',
},
{
name: '张安',
pwd: '张安',
_id: 5f44f3c4a34d5c10fc417981,
age: 18,
sex: '男',
__v: 0
}
]
使用分页
model.find({}).limit(1)
.then(res => {
console.log(res)
db.close()
return res
})
.catch(err => {
console.log(err)
return false
})
运行
数据库连接成功
[
{
name: '张安',
pwd: '张安',
_id: 5f44f19c5b67fd3350848d2f,
age: 18,
sex: '男',
__v: 0
}
]
接口
定义
接口就是文件(随时可接入),主要响应json数据或XML数据
开发规范 Restful API
测试工具
postman:模拟http测试接口,查看接口返回数据
express
http.js
// 1 引入模块
const express = require('express')
var bodyParser = require("body-parser")
// 2 创建app对象,底层原理是http的createServer
const app = express()
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
// 3 路由,app.HTTP请求方式(路径,回调函数)
app.get('/', (req, res) => {
res.send('hello')
})
// 4 启动监听端口号
app.listen(process.env.PROT || '3000')
添加学生的接口
1 路由 /stu post
2 响应任意json数据
http.js
const stuController = require(process.cwd() + '/controller/stu')
// 学生添加接口
app.post('/stu', stuController.create)
controller/stu,js
const create = async (req, res) => {
res.send("this is stu create")
}
// 导出方法
module.exports = {
create: create
}
node http.js
在postman中查看接口
3 定义stu模块,定义创建数据的方法
models/stu.js
var mongoose = require('mongoose');
var db = mongoose.createConnection('mongodb://stu2:stu2@localhost:27017/school',
{ useNewUrlParser: true, useUnifiedTopology: true }, err => {
if (err) {
console.log('-------------------------');
console.log('数据库连接失败', err);
console.log('-------------------------');
return;
}
console.log('数据库连接成功');
}
)
const model = db.model('stu', {
name: { type: String, default: "大神" },
age: { type: Number },
sex: { type: String }
})
const createModel = () => {
const insertObj = new model(postdata);
return insertObj.save()
.then(res => {
console.log(res)
return res
})
.catch(err => {
console.log("插入失败" + err)
return false;
})
}
// 方法导出
module.exports = {
createModel: createModel,
}
4 调用stu模块定义创建数据的方法,返回结果
controller/stu,js
const create = async (req, res) => {
// res.send("this is stu create")
// 1 接收数据
let postData = req.body
// 2 过滤
// 3 操作数据库
let rs = await createModel(postData)
// 4 判断返回
if (rs) {
res.send({
meta: {
state: 200,
msg: "添加成功"
},
data: null
})
}
else {
res.send({
meta: {
state: 500,
msg: "添加失败"
},
data: null
})
}
}
node http.js
在postman中查看数据
添加学生列表的接口
1 路由 /stu get
2 响应任意json数据
http.js
// 学生列表接口
app.get('/stu', stuController.list)
controller/stu,js
const list = (req, res) => {
res.send("this is stu list")
}
// 导出方法
module.exports = {
create: create,
list: list
}
node http.js
在postman中查看数据
3 修改stu模块,增加查询数据的方法
models/stu.js
const listModel = () => {
return model.find()
.then(res => {
console.log(res)
return res
})
.catch(err => {
console.log("查询失败" + err)
return [];
})
}
// 方法导出
module.exports = {
createModel: createModel,
listModel: listModel
}
4 修改控制器调用定义查询数据的方法,返回结果
controller/stu,js
const list = async (req, res) => {
// res.send("this is stu list")
// 3 获取数据
let data = await listModel(ship, getData.size)
// 4 相应数据
res.send({
meta: {
state: 200,
msg: "查询数据成功"
},
data: data
})
}
node http.js
在postman中查看数据
添加学生列表分页的接口
1 修改控制器列表 /stu get 传参pageno pagesize
controller/stu.js
const list = async (req, res) => {
// res.send("this is stu list")
// 1 修改控制器,接受pageno pagesize
let getData = req.query
// console.log(getData)
// 2 过滤
let skip = (parseInt(getData.pageno) - 1) * parseInt(getData.pagesize)
// 3 获取数据
let data = await listModel(skip, parseInt(getData.pagesize))
// 4 相应数据
res.send({
meta: {
state: 200,
msg: "查询数据成功"
},
data: data
})
}
2 修改模型调用定义查询数据的方法,返回结果
const listModel = (skipnum, limitnum) => {
return model.find().skip(skipnum).limit(limitnum)
.then(res => {
console.log(res)
return res
})
.catch(err => {
console.log("查询失败" + err)
return [];
})
}
node http.js
在postman中查看数据
接口文档 开发 apiDoc
接口文档:告诉前段有哪些接口,接口有什么参数
apidoc 快速生成接口文档,基于注释生成
npm i apidoc //一次
项目根目录创建apidoc.json,一次
{
"name": "example",
"version": "0.1.0",
"description": "apiDoc basic example",
"title": "Custom apiDoc browser title",
"url" : "https://api.github.com/v1"
}
{
"name": "教学管理系统接口文档",
"version": "1.0.0",
"description": "接口文档",
"title": "Custom apiDoc browser title",
"url": "http://localhost:3000"
}
写接口注释
js格式
/**
* @api {get} /user/:id Request User information
* @apiName GetUser
* @apiGroup User
*
* @apiParam {Number} id Users unique ID.
*
* @apiSuccess {String} firstname Firstname of the User.
* @apiSuccess {String} lastname Lastname of the User.
*/
/**
* @api {get} /stu 学生模块列表接口
* @apiName Add
* @apiGroup Stu
*
* @apiParam {Number} pageno 当前页是第几页.
* @apiParam {Number} pagesize 每页显示条数
*
* @apiSuccess {String} meta 状态码&提示信息
* @apiSuccess {String} data 返回的数据
*/
生成接口文档
// 终端
apidoc -i ./接口注释目录 -o ./接口存放目录
apidoc -i ./controller -o ./doc
在doc目录下查看index.html