记录node中使用sequelize,自动生成表模型,链接操作数据库(以postgreSQL为例)
说明:
1 安装依赖
npm install -g pg pg-hstore
npm install -g sequelize
npm install -g sequelize-auto
2 运行指令
sequelize-auto -h -d -u -x [password] -p [port] --dialect [dialect] -c [/path/to/config] -o [/path/to/models] -t [tableName]
在以上参数中,除-h 、-d 参数外,其它参数都是可选的。各参数选项说明如下:
-h, --host - 数据库的IP/主机名 [必选]-d, --database - 数据库名 [必选]-u, --user - 数据库的用户名。默认将根据数据库类型的默认用户生成数据库名-x, --pass - 数据库的密码。默认为空-p, --port - 数据库连接端口。默认为所使用数据库类型的默认端口号-c, --config - JSON文件,用于Sequelize 构造函数的'options' 选项对象。参见:http://itbilu.com/nodejs/npm/VkYIaRPz-.html#api-init -o, --output - 模型输出目录。默认会在当前目录下生成'./models' 目录-e, --dialect - 所使用的数据库类型(驱动类型)。默认为mysql -a, --additional - 一个包含模型定义参数的JSON文件。参见:http://itbilu.com/nodejs/npm/VkYIaRPz-.html#api-instance-define -t, --tables - 指定所要导出的表,逗号分隔。默认为全部
3 示例
假如我的postgres数据库安装在137.184.188.66,端口号5432,登录名username,密码123456,准备在当前目录下的models文件夹下,自动生成数据库wechat中每个表的模型,那么执行:
sequelize-auto -o "./models" -d wechat -h 137.184.188.66 -u username -p 5432 -x 123456 -e postgres
4 执行结果
- 最后生成的模型如下
5 操作数据库
首先新建SeqDb.js,用于链接数据库 SeqDb.js
const Sequelize = require('sequelize');
const dbConfig = {
dialect: 'postgres',
username: 'postgres',
host: 'localhost',
password: '123456',
database: 'medicine',
}
const sequelize = new Sequelize(
dbConfig.database,
dbConfig.username,
dbConfig.password,
{
host: dbConfig.host,
dialect: dbConfig.dialect,
timezon: '+08:00',
define: {
timestamps: false
},
pool: {
max: 50,
min: 0,
idle: 30000
},
}
)
module.exports = sequelize;
5.1 对象方式
5.1.1 方式一
从自动生成的init-models.js引入全部的表模型
const byrpt = require('bcryptjs')
const Token = require('../module/token')
const SeqDb = require("../util/SeqDb")
const DbHandle = require("../models/init-models")
const DbBus = DbHandle(SeqDb)
const login = async (req, res) => {
const {username, password} = req.body
const hasUsernameFlag = await DbBus.user.findOne({
where: {
username: username
}
}
)
if (!hasUsernameFlag) {
return res.send({code: 20000, msg: '用户名不存在,请注册', success: false})
}
const passwordValid = byrpt.compareSync(password, hasUsernameFlag.password)
if (passwordValid) {
const tokenKey = Token.en(username)
return res.send({code: 20000, msg: '登录成功', token: tokenKey, success: true})
} else {
return res.send({code: 20000, msg: '密码错误', success: false})
}
}
module.exports = {
login
}
5.1.2 方式二
在controller中单独引入一个表模型
const byrpt = require('bcryptjs')
const Token = require('../module/token')
const Sequelize = require('sequelize');
const SeqDb = require("../util/SeqDb")
const User = require("../models/user")(SeqDb, Sequelize)
// 登录返回token
const login = async (req, res) => {
const {username, password} = req.body
const hasUsernameFlag = await User.findOne({
where: {
username: username
}
}
)
if (!hasUsernameFlag) {
return res.send({code: 20000, msg: '用户名不存在,请注册', success: false})
}
const passwordValid = byrpt.compareSync(password, hasUsernameFlag.password)
if (passwordValid) {
// 获取用户id
const tokenKey = Token.en(username) // 加密
return res.send({code: 20000, msg: '登录成功', token: tokenKey, success: true})
} else {
return res.send({code: 20000, msg: '密码错误', success: false})
}
}
module.exports = {
login
}
5.2 原生SQL方式
const byrpt = require('bcryptjs')
const Token = require('../module/token')
const SeqDb = require("../util/SeqDb")
const DbHandle = require("../models/init-models")
const DbBus = DbHandle(SeqDb)
const login = async (req, res) => {
const {username, password} = req.body
let sql = `SELECT * FROM medicine.USER WHERE username = '${username}' `
const result = await SeqDb.query(sql)
const hasUsernameFlag = result[0].length > 0 ? result[0][0] : null
if (!hasUsernameFlag) {
return res.send({code: 20000, msg: '用户名不存在,请注册', success: false})
}
const passwordValid = byrpt.compareSync(password, hasUsernameFlag.password)
if (passwordValid) {
const tokenKey = Token.en(username)
return res.send({code: 20000, msg: '登录成功', token: tokenKey, success: true})
} else {
return res.send({code: 20000, msg: '密码错误', success: false})
}
}
module.exports = {
login
}
|