全栈博客-koa2版本
全栈博客-koa2版本
全栈博客-koa2版本
知识点:npx
1
2
// 安装依赖koa-generator,然后执行 koa2 server
npx -p koa-generator koa2 server
知识点:ORM
Object-Relational Mapping,把关系数据库的表结构映射到对象上。
koa2
中间件
使用方式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cont Koa = require('koa')
const app = new Koa()
app.use(async function m1(ctx, next){
console.log('m1 start')
await next()
console.log('m1 end')
})
app.use(async function m2 (ctx, next){
console.log('m2 start')
await next()
console.log('m2 end')
})
app.listen(3000, function(){})
打印的结果依次是: m1 start、m2 start、m2 end、m1 end
也就是,在m1的执行过程中,当执行到next()的时候,会来到m2中,当m2执行完后再回到m1中执行。其实,这也是一种典型的递归的执行顺序,这种函数嵌套执行的方式也被称作洋葱模型。
第一张图是著名的洋葱模型图,第二张是洋葱模型中间件的示意图;
koa-router
Sequelize
模型定义
define 定义模型(表)
表名推断
- 默认情况下,当未提供表名时,Sequelize 会自动将模型名复数并将其用作表名;
freezeTableName: true强制表名等于模型名称,停止自动复数化;tableName:'Employees'直接定义表名。
模型同步
User.sync()- 如果表不存在,则创建该表(如果已经存在,则不执行任何操作)User.sync({force: true})- 将创建表,如果表已经存在,则将其首先删除User.sync({alter: true})- 这将检查数据库中表的当前状态(它具有哪些列,它们的数据类型等),然后在表中进行必要的更改以使其与模型匹配.
使用
sequelize.sync()自动同步所有模型
###
时间戳 默认情况下,Sequelize 使用数据类型 DataTypes.DATE 自动向每个模型添加 createdAt-创建时刻时间戳 和 updatedAt-更新的时间戳 字段; 这些字段会自动进行管理 - 每当你使用Sequelize 创建或更新内容时,这些字段都会被自动设置。
注意: 这是在 Sequelize 级别完成的(即未使用 SQL触发器 完成). 这意味着直接 SQL 查询(例如,通过任何其他方式在不使用 Sequelize 的情况下执行的查询)将不会导致这些字段自动更新.
timestamps: false禁用此行为
默认值
默认情况下 Sequelize 假定列的默认值为 NULL,可以通过 defaultValue 传递给列定义来更改此行为。
Sequelize.NOW 当前时间 - 可用于填充默认值
数据类型
字符串
1
2
3
4
5
6
7
DataTypes.STRING // VARCHAR(255)
DataTypes.STRING(1234) // VARCHAR(1234)
DataTypes.STRING.BINARY // VARCHAR BINARY
DataTypes.TEXT // TEXT
DataTypes.TEXT('tiny') // TINYTEXT
DataTypes.CITEXT // CITEXT 仅 PostgreSQL 和 SQLite.
DataTypes.TSVECTOR // TSVECTOR 仅 PostgreSQL.
布尔
1
DataTypes.BOOLEAN // TINYINT(1)
数字
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DataTypes.INTEGER // INTEGER
DataTypes.BIGINT // BIGINT
DataTypes.BIGINT(11) // BIGINT(11)
DataTypes.FLOAT // FLOAT
DataTypes.FLOAT(11) // FLOAT(11)
DataTypes.FLOAT(11, 10) // FLOAT(11,10)
DataTypes.REAL // REAL 仅 PostgreSQL.
DataTypes.REAL(11) // REAL(11) 仅 PostgreSQL.
DataTypes.REAL(11, 12) // REAL(11,12) 仅 PostgreSQL.
DataTypes.DOUBLE // DOUBLE
DataTypes.DOUBLE(11) // DOUBLE(11)
DataTypes.DOUBLE(11, 10) // DOUBLE(11,10)
DataTypes.DECIMAL // DECIMAL
DataTypes.DECIMAL(10, 2) // DECIMAL(10,2)
日期
1
2
3
DataTypes.DATE // DATETIME 适用于 mysql / sqlite, 带时区的TIMESTAMP 适用于 postgres
DataTypes.DATE(6) // DATETIME(6) 适用于 mysql 5.6.4+. 支持6位精度的小数秒
DataTypes.DATEONLY // 不带时间的 DATE
其他参数
allowNull
将 allowNull 设置为 false 将为该列添加 NOT NULL,
这意味着如果该列为 null,则在执行查询时将从数据库引发错误.
如果要在查询数据库之前检查值是否不为 null,请查看下面的验证部分.
primaryKey:true
继续阅读有关主键的更多信息
autoIncrement:true
autoIncrement 可用于创建 auto_incrementing 整数列
field
指定自定义列名称
模型实例
- 创建实例
create() - 删除实例
destroy() - 修改实例
update() - 重载实例
reload()
模型查询
验证和约束
**验证 **是在纯 JavaScript 中在 Sequelize 级别执行的检查,如果验证失败,则根本不会将 SQL 查询发送到数据库;
**约束 **是在 SQL 级别定义的规则,如果约束检查失败,则数据库将引发错误,在这种情况下,与验证不同,它执行了 SQL 查询。
