记录node中使用sequelize,自动生成表模型,链接操作数据库(以postgreSQL为例)

记录node中使用sequelize,自动生成表模型,链接操作数据库(以postgreSQL为例)

说明: Sequelize是关于node的ORM框架。可用于Postgres、MySQL、MariaDB、SQLite和Microsoft SQL Server。具有可靠的事务支持、关系、即时和延迟加载、读取复制等功能。

1 自动生成数据库表模型

1.1 安装依赖

npm install -g pg pg-hstore # postgres数据库
npm install -g sequelize
npm install -g sequelize-auto

1.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 - 指定所要导出的表,逗号分隔。默认为全部

1.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

1.4 过程截图

  • 原始数据库
    在这里插入图片描述

  • 执行指令,自动创建表模型
    在这里插入图片描述
    在这里插入图片描述

  • 最后生成的模型如下
    在这里插入图片描述

2 连接数据库

2.1 配置文件

  • 首先新建配置文件SeqDb.js,用于链接数据库
const Sequelize = require('sequelize');

const dbConfig = {
  dialect: 'postgres',     // 数据库类型
  username: 'postgres',   // 用户名
  host: 'localhost',      // 数据库服务器IP
  password: '123456',     // 数据库密码
  database: 'medicine',      // 数据库名
}

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;

2.2 连接数据库——对象方式

2.2.1 方式一

从自动生成的引入全部的表模型

const byrpt = require('bcryptjs')
const Token = require('../module/token')

const SeqDb = require("../util/SeqDb")
const DbHandle = require("../models/init-models")
const DbBus = DbHandle(SeqDb)

// 登录返回token
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) {
        // 获取用户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
}

2.2.2 方式二

按需单独引入一个表模型

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
}

2.3 连接数据库——原生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)

// 登录返回token
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) {
        // 获取用户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
}

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值