关于express+mongodb项目的一些改造(部分)

文章目录


express项目改造MVC(以拉勾网职位为例)
拉勾网接口: https://m.lagou.com/listmore.json?pageNo=1&pageSize=20

MVC改造,即分离数据M,视图V,逻辑C(控制器)

  1. 建立项目express -e mongoose_demo,并安装项目依赖 npm i
    增删改查 CRUD 是指在做计算处理时的增加(Create)、读取(Read)、更新(Update)和删除(Delete)几个单词的首字母简写

  2. 建立路由文件 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’ )

  1. 项目目录建立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’ )

  1. 项目目录建立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

  1. 项目目录建立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

  1. 使用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值