mongoose下载
下载:npm i mongoose
mongoos核心概念
schema:约束字段/列数据
model:模型对应集合,后期用它来实现数据的增删改查
Schema
英文网:http://mongoosejs.com
中文网:http://mongoosejs.net/
作用:用来约束MongoDB文档数据(哪些字段必须,哪些字段可选的)
mongoose语法
const mongoose = require('mongoose');
//连接数据库
const db = mongoose.createConnection('mongodb://user:password@localhost:port/database', {
useNewUrlParser: true,
useUnifiedTopology: true
}, err => {
if (err) {
console.log('----------------------')
console.log('数据库连接失败', err)
console.log('----------------------')
return;
}
console.log('数据库连接成功')
})
//设置数据模型(声明是哪个集合,限制字段个数和字段类型)
const model = db.model('user', {
name: { type: String, default: 'username' },
age: { type: Number },
sex: { type: String }
})
数据库插入操作:
const insertObj = new model({
name: "张三",
age: 18,
sex: "男"
})
insertObj.save()
.then(res => {
console.log(res)
db.close()
return res
})
.catch(err => {
console.log('插入失败' + err)
return false
})
数据库查找操作:
model.find({}).skip(1).limit(2) //分页
.then(res => {
console.log(res)
db.close()
return res
})
.catch(err => {
console.log('读取失败' + err)
return false
})
接口
概念:就是一个文件,主要响应JSON数据(操作方便,体积小)或者XML数据
p
推荐返回JSON数据模板:
{
meta:{
msg:提示信息,
status:状态码(200/201/301/.....)
},
data:数据
}
标准的RESTful架构
1.项目所有模块有统一的标准
2.看URL就知道要操作的资源是什么
3.看HTTP Method就知道操作动作是什么,是添加(post)还是删除(delete)
4.看HTTP Status Code就知道操作结果如何,是成功(200)还是内部错误(500)
例:
订单模块
/order get
/order post
/order/编号 put
/order/编号 delete
教学管理系统开发
express
下载:npm i express
作用:一个基于nodejs开发的框架(原理基于node内置http模块封装)
语法:
//1.导入express模块
const express = require('express')
//2.创建app对象,通过语法express() 底层原理http模块的createServer
const app = express()
var bodyParser = require('body-parser'); /*post方法*/
app.use(bodyParser.json()); // 添加json解析
app.use(bodyParser.urlencoded({ extended: false }));
//3.路由,语法 app.HTTP请求方式(路径,回调函数)
app.get('/', (req, res) => {
//send是express用来响应数据
res.send('hello,gmz')
})
//#学生添加
const stuController = require(process.cwd() + '/controller/stu')//process.cwd()是获取当前文件路径,实现字符串拼接
app.post('/stu', stuController.create)
app.get('/stu', stuController.index)
//4.启动服务监听端口
app.listen(3000, () => {
console.log('http://localhost:3000')
})
在/controller/stu下定义方法
//倒入模型
const {
createModel,
findModel
} = require(process.cwd() + '/models/stu')
//定义处理方法
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: {
status: 200,
msg: "添加成功"
},
data: null
})
} else {
res.send({
meta: {
state: 500,
msg: "添加失败"
},
data: null
})
}
}
const index = async(req, res) => {
let getData = await findModel()
if (getData) {
res.send({
meta: {
status: 200,
msg: "查询成功"
},
data: getData
})
} else({
meta: {
status: 500,
msg: "查询失败"
},
data: null
})
}
//导出成员
module.exports = {
create,
index
}
定义模型:
const mongoose = require('mongoose');
//连接数据库
const db = mongoose.createConnection('mongodb://shop2:admin123@localhost:27017/shop', {
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: 'gmz' },
age: { type: Number },
sex: { type: String }
})
//方法
const createModel = (postData) => {
const insertObj = new model(postData)
return insertObj.save()
.then(res => {
console.log(res)
return res
})
.catch(err => {
console.log('插入失败' + err)
return false
})
}
const findModel = () => {
return model.find({})
.then(res => {
return res
})
.catch(err => {
console.log('查询失败' + err)
return []
})
}
module.exports = {
createModel,
findModel
}