egg typescript 使用遇到的问题汇总

    技术2022-07-10  109

    sequelize类型

    Sequelize.STRING // VARCHAR(255) Sequelize.STRING(1234) // VARCHAR(1234) Sequelize.STRING.BINARY // VARCHAR BINARY Sequelize.TEXT // TEXT Sequelize.TEXT('tiny') // TINYTEXT Sequelize.INTEGER // INTEGER Sequelize.BIGINT // BIGINT Sequelize.BIGINT(11) // BIGINT(11) Sequelize.FLOAT // FLOAT Sequelize.FLOAT(11) // FLOAT(11) Sequelize.FLOAT(11, 12) // FLOAT(11,12) Sequelize.REAL // REAL 仅限于PostgreSQL. Sequelize.REAL(11) // REAL(11) 仅限于PostgreSQL. Sequelize.REAL(11, 12) // REAL(11,12) 仅限于PostgreSQL. Sequelize.DOUBLE // DOUBLE Sequelize.DOUBLE(11) // DOUBLE(11) Sequelize.DOUBLE(11, 12) // DOUBLE(11,12) Sequelize.DECIMAL // DECIMAL Sequelize.DECIMAL(10, 2) // DECIMAL(10,2) Sequelize.DATE // DATETIME 针对 mysql / sqlite, TIMESTAMP WITH TIME ZONE 针对 postgres Sequelize.DATE(6) // DATETIME(6) 针对 mysql 5.6.4+. 小数秒支持多达6位精度 Sequelize.DATEONLY // DATE 不带时间. Sequelize.BOOLEAN // TINYINT(1) Sequelize.ENUM('value 1', 'value 2') // 一个允许具有 “value 1” 和 “value 2” 的 ENUM Sequelize.ARRAY(Sequelize.TEXT) // 定义一个数组。 仅限于 PostgreSQL。 Sequelize.ARRAY(Sequelize.ENUM) // 定义一个 ENUM 数组. 仅限于 PostgreSQL。 Sequelize.JSON // JSON 列. 仅限于 PostgreSQL, SQLite and MySQL. Sequelize.UUID // PostgreSQL 和 SQLite 的 UUID 数据类型, CHAR(36) BINARY 针对于 MySQL (使用默认值: Sequelize.UUIDV1 或 Sequelize.UUIDV4 来让 sequelize 自动生成 ID) Sequelize.GEOMETRY // 空间列. 仅限于 PostgreSQL (具有 PostGIS) 或 MySQL. Sequelize.GEOMETRY('POINT') // 具有几何类型的空间列. 仅限于 PostgreSQL (具有 PostGIS) 或 MySQL. Sequelize.GEOMETRY('POINT', 4326) // 具有几何类型和SRID的空间列. 仅限于 PostgreSQL (具有 PostGIS) 或 MySQL.

    使用

    基于 Egg.js 框架的 Node.js 服务构建之用户管理设计如何为团队定制 Egg 目录挂载规范?使用ts版的eggjs来搭建api 当 Egg 遇到 TypeScript,收获茶叶蛋一枚egg typescript模板下使用 egg-sequelize 下就报错。添加到 typings/index.d.ts 就不报错了 示例: /* * @Description: * @version: * @Author: 周凯 * @Date: 2020-07-02 21:42:16 * @LastEditors: 周凯 * @LastEditTime: 2020-07-02 22:24:52 */ import uuidv1 from "uuid/v1"; import { Application } from "egg"; // 生成uuid function generateUUID() { return uuidv1().replace(/-/g, ""); } // 默认model function defineModel(app: Application, name, attributes) { const { UUID } = app.Sequelize; let attrs: any = {}; for (let key in attributes) { let value = attributes[key]; if (typeof value === "object" && value["type"]) { value.allowNull = value.allowNull && true; attrs[key] = value; } else { attrs[key] = { type: value, allowNull: true, }; } } attrs.id = { type: UUID, primaryKey: true, defaultValue: () => { return generateUUID(); }, }; return app.model.define(name, attrs, { createdAt: "createdAt", updatedAt: "updatedAt", version: true, freezeTableName: true, }); } export { defineModel };

    app.utils

    内置的 Helper 太简单的,只支持单文件。实际上 Helper 的定位是给模板渲染用的,如果大家有一些公共方法,可以自定义挂载到 app.utils 上。 // config/config.default.js // javascript exports.customLoader = { utils: { directory: 'app/utils', inject: 'app', }, }; --------------------分割线 //typescript config.customLoader = { utils: { directory: "app/utils", inject: "app", }, }; 定义 // app/utils/formatter.js module.exports = class Formatter { constructor(app) { this.app = app; this.config = app.config; this.logger = app.logger; } // 会被挂载为 `app.utils.formatter.random()` random(max) { return Math.floor(Math.random() * Math.floor(max)); } }; 当然也可以简化为 module.exports = app => { return { random() {}, }; }; 配置ts自动提示- 生成声明,由于 Egg 是动态挂载的,因此 TS 和智能提示,需要通过我们的 ets 来自动生成映射。需要简单配置下 package.json,重启下,即可自动生成对应的 typings。 { "name: "egg-showcase", "egg": { "declarations": true, "tsHelper": { "watchDirs": { "enum": { "enabled": true, "directory": "app/enum", "declareTo": "Application.enum" }, "utils": { "enabled": true, "directory": "app/utils", "declareTo": "Application.utils" }, "rpc": { "enabled": true, "directory": "app/rpc", "declareTo": "Context.rpc" } } } }, } 享受智能提示吧jwt 用户登录认证 eggjs入门系列——使用egg-jwt egg 参数校验
    Processed: 0.010, SQL: 9