node express postgreSQL sequelize项目
1、目录结构
- bin
- config ---------- 数据库配置等
- control --------- 控制层,进行数据库操作
- model ---------- 模型层,建立原型
- node_modules
- public ---------- 静态目录
- routes ---------- 路由
- utils ------------- 工具
- views ----------- 视图
- app.js
- package.json
2、安装的模块
express
、 pg
、 sequelize
、 body-parser
3、express 路由
- routes
- user
- user.js
- report
- report.js
- routes.js
- index.js
- user
routes.js
// routes.js
const index = require('./index')
const user = require('./user/user')
const report = require('./report/report')
// 引入路由模块
module.exports = function(app){
app.use('/', index)
app.use('/user', user)
app.use('/report', report)
}
index.js
// index.js
var express = require('express');
var router = express.Router();
// 访问 ‘/’
router.get('/', function(req, res, next) {
res.send('index');
});
module.exports = router;
report.js
// report.js
const express = require('express')
const router = express.Router()
// 以routes中的路径作为根目录
// 访问/report
router.get('/', (req, res) => {
res.send('report')
})
module.exports = router
user.js
// user.js
const User = require('../../control/user/user')
const express = require('express')
const router = express.Router()
// 获取用户所有数据
router.get('/', (req, res) => {
User.queryUserAll().then((userData) => {
res.json(userData)
}).catch((err) => {
res.send('error')
console.log(err)
})
})
// 根据用户名查询用户数据
router.get('/:username', (req, res) => {
let username = req.params.username
User.queryUserOne(username).then((result) => {
res.json(result)
}).catch((err) => {
res.send('error')
console.log(err)
})
})
// 增加一条
router.post('/add', (req, res) => {
let params = req.body
User.addUser(params).then((result) => {
console.log(result)
res.send(result)
}).catch((err) => {
res.send('error')
console.log(err)
})
})
// 批量增加
router.post('/addBatch', (req, res) => {
let params = req.body
console.log(params)
User.addUserBatch(params).then((result) => {
res.send(result)
}).catch((err) => {
res.send('error')
console.log(err)
});
})
// 修改一条
router.post('/update', (req, res) => {
let params = req.body
console.log(params)
User.updateUser(params).then((result) => {
res.send(result)
}).catch((err) => {
res.send('error')
console.log(err)
});
})
// 删除一条
router.delete('/delete/:id', (req, res) => {
let id = req.params.id
User.deleteUser(id).then((result) => {
res.send({"message": "删除成功"})
}).catch((err) => {
res.send('error')
console.log(err)
});
})
module.exports = router
在app.js中引入routes.js
app.js
require('./routes/routes.js')(app)
4、数据库连接池
config/db.js
const Sequelize = require('sequelize');
const dbConfig = {
database: 'users', // 数据库名
username: 'postgres', // 用户名
password: '123456', // 本地数据库密码
host: 'localhost', // 数据库服务器IP
dialect: 'postgres' // 数据库类型
}
const sequelize = new Sequelize(
dbConfig.database,
dbConfig.username,
dbConfig.password,
{
host: dbConfig.host,
dialect: dbConfig.dialect, //数据库类型(这里使用postgres)
// 设置时区
timezon: '+08:00',
define: {
timestamps: false //为模型添加 createdAt 和 updatedAt 两个时间戳字段(true or false)
},
pool: { //使用连接池连接,默认为true
max: 50,
min: 0,
idle: 30000
},
}
)
module.exports = sequelize;
5、建立原型 model
model/user/user.js
const sequelize = require('sequelize')
const db = require('../../config/db')
const { INTEGER,STRING } = sequelize
// 定义一个 user model
const User = db.define(
'user', // 表名
{
id: {
type: INTEGER,
autoIncrement: true, //是否自增 ;true or false
primaryKey: true //指定是否为主键 ;true or false
},
user_name: {
type: STRING(128),
},
password: {
type: STRING(128),
}
},
{
freezeTableName: true // 设置为true时,sequelize不会改变表名,否则可能会按其规则有所调整
}
)
module.exports = User
6、数据库操作 控制层
control/user/user.js
const User = require('../../model/user/user')
const db = require('../../config/db')
module.exports = {
// 查询一条
queryUserOne(username){
return new Promise((resolve, reject) => {
User.findOne({
where: {
user_name: username
}
}).then((res) => {
// 对数据进行处理
let data = res
resolve(data)
}).catch((err) => {
reject(err)
});
})
},
// 查询所有用户数据
queryUserAll(){
return new Promise((resolve, reject) => {
User.findAll().then( res => {
let data = res
resolve(data)
}).catch(err => {
reject(err)
})
})
},
// 增加一条
addUser(params){
return new Promise((resolve, reject) => {
User.create(params).then( res => {
let data = res
console.log(data)
resolve(data)
}).catch(err => {
reject(err)
})
})
},
// 批量增加
addUserBatch(params){
return new Promise((resolve, reject) => {
User.bulkCreate(params).then( res => {
let data = res
resolve(data)
}).catch(err => {
reject(err)
})
})
},
// 修改一条
updateUser(params){
return new Promise((resolve, reject) => {
User.update(params,{
where: {id: params.id}
}).then( res => {
let data = res
resolve(data)
}).catch(err => {
reject(err)
})
})
},
// 删除一条
deleteUser(id){
return new Promise((resolve, reject) => {
User.destroy({
where: {
id: String(id)
}
}).then( res => {
resolve(res)
}).catch(err => {
reject(err)
})
})
},
// 原始sql语句查询
queryBySql(){
return new Promise( (resolve, reject) => {
let sql = `SELECT * FROM user`
db.query(sql).then(res => {
resolve(res)
}).catch(err => {
reject(err)
})
} )
}
}
注释:在 control/db.js
中使用 sequelize
建立数据库连接池,在 model
中导入,并建立 sequelize
原型,在 control
中引入 model
原型,通过原型使用 sequelize
进行数据库操作。