模型与测试

安装 password-hash 与测试

用来处理用户密码,不存储用户的明文密码,而是存储加密后的。

npm i password-hash -S

在 src 目录下面创建 db.ts , 定义模型我们使用define方法, 这些都是有代码提示的。

import * as Sequelize from 'sequelize';
import * as ph from 'password-hash';
import { resolve } from 'path';

const sq = new Sequelize('db', null, null,{
    dialect: 'sqlite',
    storage: resolve(__dirname, '../storage/db.sqlite3')
});

var User = sq.define('user', {
    id:{
        type: Sequelize.INTEGER,
        primaryKey: true,
        autoIncrement: true
    },
    username: {
      type: Sequelize.STRING,
    },
    email: {
     type: Sequelize.STRING
    },
    password: {
     type: Sequelize.STRING
    }
}, {
    timestamps: false,
    freezeTableName: true // Model tableName will be the same as the model name
});

User.create({
    username: 'yugo',
    email: 'belovedyogurt@gmail.com',
    password: ph.generate('123456')
}).then(console.log)

首先编译

之后再运行

这样我们就可以在数据里面看到我们的数据了。

编写 Model 与 ava 测试文件

之前我们是把js文件编译到dist目录下管理,假如我们的test下面的测试文件也跑到dist目录下面的话就感觉很别扭,因为它没有在它该在的位置上,也就是不在其位而谋其政,尽管我们可以通过写2个 tsconfig.json 和 配置 exclude 选项让它们分开编译来解决这个问题,我们还不如就让 js 和 ts 在同一目录下来的简单。

修改我们的 db.ts 我们让他仅仅只提供数据库连接。

修改 tsconfig.json

在根目录下面新建一个 types 文件夹,在这里面你可以写你的代码提示文件,但是并不会被转换成模块。

在 src 目录下面创建 model 文件夹,新建 todo.tstodoFolder.tsuser.ts 三个文件。

model 下面都是存放我们的模型,通过 hasMany 定义模型之间的关系。

  • todo.ts

  • todoFolder.ts

  • user.ts

为了确保这些 model 都已经正确可用了,我们需要编写我们的测试文件。

首先全局安装 ava 测试套件

在根目录初始化 ava 套件

在根目录下面创建 test 文件夹,在里面新建 user.ts

一定不要把异步函数传给闭包,要不然有一些你意想不到的后果。

每次运行测试之前必须先运行 tsc 编译好,之后再运行 ava 命令。

我们可以修改一下 package.json 的 scripts

现在我们在根目录下运行

到现在,我们的 Model 已经基本建立完成了,接下来我们进入业务编写环节。

Last updated