MVC改造,即分离数据M,视图V,逻辑C(控制器)
-
建立项目express -e mongoose_demo,并安装项目依赖 npm i
增删改查 CRUD 是指在做计算处理时的增加(Create)、读取(Read)、更新(Update)和删除(Delete)几个单词的首字母简写 -
建立路由文件 routes/position.js
路由模块中只有路由功能
在路由模块中导入controller.js控制器模块,将请求方式的req,res,next参数传递给控制器执行
const positionController = require( ‘…/controller/positonController’ )
.post(( req,res,next ) => {
// 为什么要对象传参?
// 对象无序
// 按需使用参数
positionController.add( { req,res,next,…req.body } )
})
在app.js中导入路由模块
方向:app.js中引入,const positionRouter = require( ‘./routes/position’ )
- 项目目录建立controller文件夹,分离控制器模块(逻辑)
controller
└─ positonController.js
建立positionController.js模块
控制器执行请求数据的功能
连接路由与数据,将数据暴露给路由的接口
将路由请求的参数传递给数据层执行
路由传参到控制器{ req, res, next, …req.body }
控制器传参到数据模型{ res, positionName, city, companyName }
/*
打造position控制器模块
控制是用于写逻辑控制的,那么它应该操作数据吗?
*/
const positionModel = require( ‘…/model/positionModel’ )
const positionController = {
add ( { res,positionName,city,companyName }) { // 增
positionModel.add( { res,positionName,city,companyName })
},
del () { // 删
},
update () { // 改
},
query () { // 查
}
}
module.exports = positionController
方向:routes/position.js中引入 const positionController = require( ‘…/controller/positionController’ )
- 项目目录建立model文件夹,分离数据模块
model
└─ positionModel.js
引入db文件夹内数据库操作模块
引入文件名为index.js的模块时,文件名可以省略
将需要从数据库读取的数据请求,传参给数据库操作模块
接收控制器传来的请求参数和数据{ res, positionName, city, companyName }
并将数据传参给db模块db.position.add({ positionName, city, companyName });
在此处暴露接口
res.json({
status: ‘增加成功’,
});
const db = require( ‘…/db’ )
const positionModel = {
add ( { res,positionName,city,companyName }) {
db.position.add( { positionName,city,companyName })
res.json({
ret: true,
status: ‘增加成功’
})
},
del () {
db.position.del()
},
updated () {
db.position.update()
},
query () {
db.position.query()
}
}
module.exports = positionModel
方向:controller/positionController.js中引入,const positionModel = require( '…/model/positionModel
- 项目目录建立db文件夹,分离数据库操作
安装mongoose插件npm i mongoose -S
建立相关文件目录如下
// 可以用linux命令行创建
// js文件创建:vi index.js 然后:wq保存退出
// 文件夹创建:mkdir model
db
├─ index.js
├─ connect.js
├─ model
│ ├─ index.js
│ └─ dbPositionModel.js
└─ schema
├─ index.js
└─ positionSchema.js
connect.js中连接数据库,引入mongoose模块
const mongoose = require(‘mongoose’);
// mongoose.connect( url, callbak )
// mongoose.connect( ‘mongodb://127.0.0.1:27017/数据库名称’, callbak )
const connect = {
run () {
mongoose.connect( mongodb://127.0.0.1:27017/${ dbName }
, ( error ) => {
if( error ) console.log( ‘error is:’ + error )
console.log(‘The database is connected~~~’)
})
}
}
module.exports = connect;
index.js 中引入connect.js模块
schema文件夹中操作,建立连接数据库骨架
positionSchema.js 是此数据库骨架模块
其中定义此数据库中字段和字段数据类型
const mongoose = require(‘mongoose’);
const positionSchema = new mongoose.Schema({
positionName: String,
city: String,
companyName: String,
});
module.exports = positionSchema;
index.js 中统一管理schema文件内所有schema模块
暴露引入的所有schema模块
所以使用对象暴露,可以暴露多个模块
const positionSchema = require(’./positionSchema’)
module.exports = {
positionSchema
}
model文件夹中操作,建立数据库模型
dbPositionModel.js 中建立数据库模型
const mongoose = require( ‘mongoose’ )
const dbPositionModel = ({ collectionName, schemaName }) => {
// mongoose.model( 集合名称,骨架 )
//一定要注意: 集合名称一定要写成复数
return mongoose.model( collectionName,schemaName )
}
module.exports = dbPositionModel
index.js管理所有model模块
暴露引入的所有model模块
在db/index.js中进行所有数据库操作
连接数据库
const connect = require( ‘./connect’ )
connect.run()
创建骨架
const { positionSchema } = require( ‘./schema/index.js’ )
创建模型
const { dbPositionModel } = require( ‘./model/index.js’ )
// 给模型传两个参数,集合名称,骨架
const position_model = dbPositionModel( {
collectionName: ‘positions’,// 集合名要复数
schemaName: positionSchema
})
创建实体 【 实例化模型得到实体 】
const db = {
position: {
add(data) {
// 做数据库操作 , 添加一条数据进入数据库
const position = new position_model(data)
position.save()
console.log(’’);
console.log(‘add’, data);
console.log(’’);
},
del() {},
update() {},
query() {}
},
}
暴露模块 module.exports = db
- 使用Insomnia软件进行接口测试
POST方法,接口地址:http://localhost:3000/position
此项目修改的目录结构,以及各模块依赖
mongoose_demo
├─ app.js // 引入routes/position.js路由模块
├─ bin
│ └─ www // 可以修改接口地址端口
├─ routes
│ └─ position.js // 路由模块,引入控制器模块controller/positionController.js
├─ controller
│ └─ positionController.js // 控制器模块,引入数据模型模块model/positionModel.js
├─ model
│ └─ positionModel.js // 数据模型模块,引入数据库模块db/index.js
├─ db
│ ├─ index.js // 数据库主模块,引入数据库连接模块connect.js
│ │ // 引入数据库模型模块model/index.js
│ │ // 引入数据库骨架模块schema/index.js
│ │
│ ├─ connect.js // 数据库连接模块
│ ├─ model
│ │ ├─ index.js // 引入文件夹内的数据库模型模块
│ │ └─ dbPositionModel.js
│ └─ schema
│ ├─ index.js // 引入文件夹内的数据库骨架模块
│ └─ positionSchema.js
└─ package.json