[TOC]
### sequelize 數據庫配置
### 參數配置
~~~
class Bar extends Model {}
Bar.init({ /* bla */ }, {
// 模型的名稱. 該模型將以此名稱存儲在`sequelize.models`中.
// 在這種情況下,默認為類名,即Bar.
// 這將控制自動生成的foreignKey和關聯命名的名稱
modelName: 'bar',
// 不添加時間戳屬性 (updatedAt, createdAt)
timestamps: false,
// 不刪除數據庫條目,但將新添加的屬性deletedAt設置為當前日期(刪除完成時).
// paranoid 只有在啟用時間戳時才能工作
paranoid: true,
// 將自動設置所有屬性的字段參數為下劃線命名方式.
// 不會覆蓋已經定義的字段選項
underscored: true,
// 禁用修改表名; 默認情況下,sequelize將自動將所有傳遞的模型名稱(define的第一個參數)轉換為復數. 如果你不想這樣,請設置以下內容
freezeTableName: true,
// 定義表的名稱
tableName: 'my_very_custom_table_name',
// 啟用樂觀鎖定. 啟用時,sequelize將向模型添加版本計數屬性,
// 并在保存過時的實例時引發OptimisticLockingError錯誤.
// 設置為true或具有要用于啟用的屬性名稱的字符串.
version: true,
// Sequelize 實例
sequelize,
})
~~~
如果你希望sequelize處理時間戳,但只想要其中一部分,或者希望你的時間戳被稱為別的東西,則可以單獨覆蓋每個列:
~~~
class Foo extends Model {}
Foo.init({ /* bla */ }, {
// 不要忘記啟用時間戳!
timestamps: true,
// 我不想要 createdAt
createdAt: false,
// 我想 updateAt 實際上被稱為 updateTimestamp
updatedAt: 'updateTimestamp',
// 并且希望 deletedA t被稱為 destroyTime(請記住啟用paranoid以使其工作)
deletedAt: 'destroyTime',
paranoid: true,
sequelize,
})
~~~
你也可以更改數據庫引擎,例如 變更到到MyISAM, 默認值是InnoDB.
~~~js
class Person extends Model {}
Person.init({ /* attributes */ }, {
engine: 'MYISAM',
sequelize
})
// 或全局的
const sequelize = new Sequelize(db, user, pw, {
define: { engine: 'MYISAM' }
})
~~~
最后,你可以為MySQL和PG中的表指定注釋
~~~js
class Person extends Model {}
Person.init({ /* attributes */ }, {
comment: "我是一個表注釋!",
sequelize
})
~~~
*****
### 索引
Sequelize支持在`Model.sync()`或`sequelize.sync`中創建的模型定義中添加索引.
~~~js
class User extends Model {}
User.init({}, {
indexes: [
// 在 email 上創建一個唯一索引
{
unique: true,
fields: ['email']
},
// 在使用 jsonb_path_ops 的 operator 數據上創建一個 gin 索引
{
fields: ['data'],
using: 'gin',
operator: 'jsonb_path_ops'
},
// 默認的索引名將是 [table]_[fields]
// 創建多列局部索引
{
name: 'public_by_author',
fields: ['author', 'status'],
where: {
status: 'public'
}
},
// 具有有序字段的BTREE索引
{
name: 'title_index',
method: 'BTREE',
fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
}
],
sequelize
});
~~~
*****
### 連接配置
~~~
config.sequelize = {
// 數據庫類型
dialect: 'mysql',
// 主機
host: '127.0.0.1',
// 數據庫密碼
password: 'admin888',
// 端口
port: 3306,
// 數據庫
database: 'weibo',
// 中國時區
timezone: '+08:00',
// 個性化配置
define: {
// 取消數據表名復數
freezeTableName: true,
// 自動寫入時間戳 created_at updated_at
timestamps: true,
// 字段生成軟刪除時間戳 deleted_at
paranoid: true,
createdAt: 'created_at',
updatedAt: 'updated_at',
deletedAt: 'deleted_at',
// 所有駝峰命名格式化
underscored: true
}
};
~~~
- 概述
- 起步
- 跨域配置
- 路徑別名
- 路由
- api版本控制
- 錯誤和異常
- 全局異常處理
- 數據庫
- 創建遷移文件
- sequelize數據類型
- 配置
- 新增
- 查詢
- 條件查詢
- 模糊查詢
- 排序查詢
- 聚合查詢
- 分組查詢
- 分頁查詢
- 修改
- 刪除
- 獲取器
- 修改器
- 靜態屬性
- 字段驗證
- 外鍵約束
- 關聯模型
- 一對一
- 一對多
- 左外連接
- 多對多
- 字段顯示隱藏
- 事務
- 字段自增
- 驗證層
- egg-validate
- indicative驗證器
- egg-validate-plus
- betterValidate
- 校驗規則
- 中間件
- 安全
- 數據加密
- 單向加密
- 示例代碼
- 封裝egg加密
- 上傳
- path模塊
- 單文件上傳
- 多文件上傳
- 按照日期存儲
- 工具函數
- egg常用工具函數
- 緩存
- 配置緩存插件
- 設置緩存
- 獲取緩存
- 刪除緩存
- 消息隊列
- rabbitMQ
- 安裝
- 簡單隊列
- 工作隊列
- 工作隊列(dispach分發)
- 消息應答和持久化
- redis
- 數據類型
- 字符串類型(String)
- 哈希類型(Hash)
- 列表(List)
- 無序集合(Set)
- 可排序集合(Zset)
- 郵件系統
- nodeMailer
- 第三方模塊
- 生成隨機數
- JWT
- JWT鑒權
- 生成Token
- 短信服務
- 阿里大魚短信驗證碼
- 發送短信邏輯
- 阿里短信Node類