在定义模型后我找不到任何关于必须使用 Model.init() 的信息,我想我做错了什么,或者我必须使用 sequelize 而不是 续集打字稿。在我尝试使用类转换器(和失败的 xd)的一段代码中,所以只需忽略它.. 所以发生的事情是 sequelize 抱怨我的模型没有定义,为了解决它,我把Model.init() 对它,我在做什么正确吗?
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,
},
);
顺便说一下,这是我的默认连接的确定方式(是的,续集打字稿在查找模型时没有任何问题):
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() 它给我的错误消息(注入消息是因为 tsyringe 所以忽略它):
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
答案 0 :(得分:0)
我想我明白了,就是这样。 “sequelize-typescript”不会自动初始化您创建的模型,因此您必须手动进行,这实际上很好,因为我可以选择何时要初始化它。目前我正在开发一个需要多个数据库连接的应用程序,并且能够在需要时随时初始化模型,这只是为我节省了一天。