node express postgreSQL sequelize項目
1康谆、目錄結(jié)構(gòu)
- bin
- config ---------- 數(shù)據(jù)庫配置等
- control --------- 控制層,進行數(shù)據(jù)庫操作
- model ---------- 模型層戒突,建立原型
- node_modules
- public ---------- 靜態(tài)目錄
- 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()
// 獲取用戶所有數(shù)據(jù)
router.get('/', (req, res) => {
User.queryUserAll().then((userData) => {
res.json(userData)
}).catch((err) => {
res.send('error')
console.log(err)
})
})
// 根據(jù)用戶名查詢用戶數(shù)據(jù)
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陌僵、數(shù)據(jù)庫連接池
config/db.js
const Sequelize = require('sequelize');
const dbConfig = {
database: 'users', // 數(shù)據(jù)庫名
username: 'postgres', // 用戶名
password: '123456', // 本地數(shù)據(jù)庫密碼
host: 'localhost', // 數(shù)據(jù)庫服務器IP
dialect: 'postgres' // 數(shù)據(jù)庫類型
}
const sequelize = new Sequelize(
dbConfig.database,
dbConfig.username,
dbConfig.password,
{
host: dbConfig.host,
dialect: dbConfig.dialect, //數(shù)據(jù)庫類型(這里使用postgres)
// 設置時區(qū)
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不會改變表名铐望,否則可能會按其規(guī)則有所調(diào)整
}
)
module.exports = User
6、數(shù)據(jù)庫操作 控制層
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) => {
// 對數(shù)據(jù)進行處理
let data = res
resolve(data)
}).catch((err) => {
reject(err)
});
})
},
// 查詢所有用戶數(shù)據(jù)
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
建立數(shù)據(jù)庫連接池,在 model
中導入跟畅,并建立 sequelize
原型,在 control
中引入 model
原型徊件,通過原型使用 sequelize
進行數(shù)據(jù)庫操作。