sequelize、moudle简单使用

本文介绍了如何在Node.js中使用Sequelize ORM和MySQL2驱动程序访问MySQL数据库。内容包括安装依赖、配置数据库连接、定义Model、以及如何根据环境选择配置文件。还提到了Model的规范,如统一主键、timestamp机制,并提供了初始化数据库的步骤。
摘要由CSDN通过智能技术生成

个人blog-1: 拾忆生活
个人blog-2: 极简-拾忆生活
欢迎大家来踩,同步更新


MySQL Node.js驱动程序

1.Node.js程序访问MySQL数据库

添加依赖包:
1.npm i mysql2
2.npm i sequelize

ORM、ODM区别:

ODM对象数据模型、ORM对象关系模型
ODM / ORM 能将网站中的数据表示为 JavaScript 对象,然后将它们映射到底层数据库
1.ODM 通常慢一些,因为在对象和数据库格式之间存在一层用于映射的翻译代码
2.ORM 可以继续用 JavaScript 对象的思维而不用转向数据库语义的思维。 在(同一个或不同网站)使用不同数据库时尤为明显

Sequelize是一款基于Nodejs功能强大的异步ORM框架
mysql> select * from pets;
+----+--------+------------+
| id | name   | birth      |
+----+--------+------------+
|  1 | Gaffey | 2007-07-07 |
|  2 | Odie   | 2008-08-08 |
+----+--------+------------+
2 rows in set (0.00 sec)

每一行可以用一个JavaScript对象
第一行:JSON表示
{
    "id": 1,
    "name": "Gaffey",
    "birth": "2007-07-07"
}

用Sequelize查询pets表:(复杂)
Pet.findAll()
   .then(function (pets) {
       for (let pet in pets) {
           console.log(`${pet.id}: ${pet.name}`);
       }
   })
   .catch(function (err) {
       // error
   });

注:
then()和catch()分别异步响应成功和失败

在koa的async异步函数中直接写await访问数据库
ES7的await来调用任何一个Promise对象:(简单)

(async () => {
    var pets = await Pet.findAll();
})();

实例:

hnode-MySQL/
|
+- .vscode/
|  |
|  +- launch.json       <-- VSCode 配置文件
|
+- package.json         <-- 项目描述文件
|
+- node_modules/        <-- npm安装的所有依赖包
|
+- init.txt             <-- 初始化SQL命令
|
+- config.js            <-- MySQL配置文件
|
+- app.js               <-- 使用koa的js

config.js

//数据库连接配置文件
var config = {
    database: 'node_test',
    username: 'root',
    password: '123456',
    host: 'localhost',
    port: 3307
};

//暴露接口
module.exports = config;

app.js


const Sequelize = require('sequelize');

//config.js的自定义依赖包
const config = require('./config');

console.log('init sequelize...');

//创建一个sequelize对象实例:
//单个进程连接到数据库,则应仅创建一个Sequelize实例
var sequelize = new Sequelize(config.database, config.username, config.password, {
    host: config.host,
    //连接数据库语言
    dialect: 'mysql',
    pool: {
        //连接池中的最大、小连接数
        max: 5,
        min: 0,
        //连接释放之前可以空闲的最长时间(以毫秒为单位)
        idle: 30000
    }
});
//测试连接是否正常
sequelize
  .authenticate()
  .then(() => {
    console.log('Connection has been established successfully.');
  })
  .catch(err => {
    console.error('Unable to connect to the database:', err);
  });

  
//Model模型Pet,告诉Sequelize如何映射数据库表
//第一个参数传入默认的表名pets
//第二个参数指定(列名:数据类型),如果是主键,指定true
//第三个参数是额外的配置,传入{ timestamps: false }
//是为了关闭Sequelize的自动添加timestamp的功能。

//sequelize 连接表的时候,会默认给你传进去的表名加上s, 
//所以需要手动配置参数 freezeTableName: true
var Pet = sequelize.define('pets', 
    {
    id: {type: Sequelize.STRING(50),primaryKey: true},
    name: Sequelize.STRING(100),
    gender: Sequelize.BOOLEAN,
    birth: Sequelize.STRING(10),
    createdAt: Sequelize.BIGINT,
    updatedAt: Sequelize.BIGINT,
    version: Sequelize.BIGINT
    }, 
    {
        timestamps: false
    });

//日期对象
var now = Date.now();

//往数据库添加数据(Promise方式)
//then()和catch()分别异步响应成功和失败
Pet.create({
    id: 'g-' + now,
    name: 'cat',
    gender: false,
    birth: '2020-01-01',
    createdAt: now,
    updatedAt: now,
    version: 0
}).then(function (p) {
    console.log('created.' + JSON.stringify(p));
}).catch(function (err) {
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值