首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在定义模型之后是否需要Model.init()?续写-打字记录

在定义模型之后是否需要Model.init()?续写-打字记录
EN

Stack Overflow用户
提问于 2021-02-18 14:15:21
回答 1查看 1.6K关注 0票数 1

在定义了一个模型之后,我找不到任何关于必须使用sequelize-typescript. ()的地方,我认为我做错了什么,或者我必须使用sequelize而不是Model.init来完成它在代码中,im试图使用类转换器(以及失败的xd),所以只需忽略它。所以,后缀会抱怨我的模型没有定义,为了解决这个问题,我把Model.init()放在上面,我做的是正确的吗?

代码语言:javascript
复制
import { DataTypes } from 'sequelize';
import sequelize from '@shared/infra/sequelize/index';
import { Table, Model, Column } from 'sequelize-typescript';
import { Exclude } from 'class-transformer';

@Table({ tableName: 'acesso_api' })
export default class User extends Model {
  @Column({ primaryKey: true })
  id: number;

  @Column
  nome: string;

  @Column
  @Exclude()
  password: string;

  @Column
  @Exclude()
  password_hash: string;

  @Column
  cliente: string;

  @Column({ defaultValue: 0 })
  @Exclude()
  admin: number;
}

User.init(
  {
    id: {
      type: DataTypes.INTEGER,
      autoIncrement: true,
      primaryKey: true,
    },
    nome: {
      type: DataTypes.STRING(45),
    },
    password: {
      type: DataTypes.STRING(45),
    },
    password_hash: {
      type: DataTypes.STRING(100),
    },
    cliente: {
      type: DataTypes.STRING(45),
    },
    admin: {
      type: DataTypes.INTEGER(),
      defaultValue: 0,
    },
  },
  {
    tableName: 'acesso_api',
    sequelize,
  },
);

顺便说一句,我的默认连接就是这样解决的(是的,在找到模型时没有任何问题):

代码语言:javascript
复制
import { Sequelize } from 'sequelize-typescript';

export default new Sequelize({
  dialect: 'mysql',
  host: process.env.HOST,
  username: process.env.POLO_USERNAME,
  password: process.env.PASSWORD,
  database: 'some_DB',
  repositoryMode: true,
  models: [`${__dirname}./src/modules/**/infra/sequelize/entities/*.ts`],
  port: 3306,
  define: {
    timestamps: false,
    underscored: true,
    freezeTableName: true,
  },
});

这是给我的错误消息,如果我没有Model.init()它(注入消息是因为注射器,所以忽略它):

代码语言:javascript
复制
Server started at port 8080
Error: Cannot inject the dependency "userRepository" at position #0 of "AuthenticateUserService" constructor. Reason:
    User has not been defined
    at /home/leandro/Documents/Projetos/api/node_modules/tsyringe/dist/cjs/dependency-container.js:290:23
    at Array.map (<anonymous>)
    at InternalDependencyContainer.construct (/home/leandro/Documents/Projetos/api/node_modules/tsyringe/dist/cjs/dependency-container.js:266:34)
    at InternalDependencyContainer.resolve (/home/leandro/Documents/Projetos/api/node_modules/tsyringe/dist/cjs/dependency-container.js:105:33)
    at /home/leandro/Documents/Projetos/api/src/modules/users/infra/http/controllers/SessionController.ts:10:37
    at Generator.next (<anonymous>)
    at /home/leandro/Documents/Projetos/api/src/modules/users/infra/http/controllers/SessionController.ts:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/leandro/Documents/Projetos/api/src/modules/users/infra/http/controllers/SessionController.ts:4:12)
    at create (/home/leandro/Documents/Projetos/api/src/modules/users/infra/http/controllers/SessionController.ts:20:16)
[INFO] 10:43:09 Restarting: /home/leandro/Documents/Projetos/api/src/shared/infra/sequelize/index.ts has been modified
Debugger listening on ws://127.0.0.1:9229/d1020fa3-ae78-4f6c-ae7f-2374628c237b
For help, see: https://nodejs.org/en/docs/inspector
EN

回答 1

Stack Overflow用户

发布于 2021-02-19 11:49:46

我想我想出来了,就像那样。“后缀-类型记录”不会自动插入您创建的模型,因此您必须手动创建,这实际上是好的,因为您可以选择什么时候要插入它。目前,我正在开发一个需要多个数据库连接的应用程序,并且可以在任何时候输入模型,这只是为我节省了时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66261773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档