IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 记录node中使用sequelize,自动生成表模型,链接操作数据库(以postgreSQL为例) -> 正文阅读

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

记录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',      // 数据库服务器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;

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)

// 登录返回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
}

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)

// 登录返回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
}

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-02-01 20:41:02  更:2022-02-01 20:42:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:45:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码