[英]How to use Subscribers in TypeORM?
考虑使用mongodb
进行以下设置(问题可能与数据库无关):
实体/Person.ts
import { Entity, Column } from 'typeorm';
@Entity
export class Person {
@Column()
name: string;
}
订阅者/PersonSubscriber.ts
import {
EntitySubscriberInterface,
EventSubscriber,
InsertEvent,
} from 'typeorm';
import { Person } from '../entity/Person';
@EventSubscriber()
export class PersonSubscriber implements EntitySubscriberInterface<Person> {
listenTo() {
return Person;
}
afterInsert(event: InsertEvent<Person>) {
console.log(event);
}
}
配置/mongo.ts
import { MongoConnectionOptions } from 'typeorm/driver/mongodb/MongoConnectionOptions';
export const mongoConfig: MongoConnectionOptions = {
type: 'mongodb',
host: 'localhost',
database: process.env.DB_NAME,
useNewUrlParser: true,
useUnifiedTopology: true,
synchronize: true,
logging: false,
entities: ['src/entity/**/*.ts'],
migrations: ['src/migration/**/*.ts'],
subscribers: ['src/subscriber/**/*.ts'],
cli: {
entitiesDir: 'src/entity',
migrationsDir: 'src/migration',
subscribersDir: 'src/subscriber',
},
};
索引.ts
import { createConnection } from 'typeorm';
import { mongoConfig } from 'config/mongo';
createConnection(mongoConfig)
.then(connection => {
console.log('connection established');
})
.catch(console.error);
PersonSubscriber
是connection.subscribers
数组的第一个元素,但是在插入 Person 文档后, InsertEvent
不会记录到控制台。
少了什么东西?
PS这是我设法收集的所有文档
https://github.com/typeorm/typeorm/blob/master/docs/listeners-and-subscribers.md
http://typeorm.delightful.studio/classes/_connection_connection_.connection.html#subscribers
总而言之,他们仍然没有讲述完整的故事。
文件名必须是 name.subscribe.ts
配置文件
"subscribers": ["dist/**/**/**/*.subscriber{.ts,.js}"]
为我工作
检查您的通配符:
subscribers: ['src/subscriber/**/*.ts']
可能需要
subscribers: ['src/subscriber/*.ts']
相反,可能带有*.js
文件的第二个条目。 至少这就是我的订阅者没有触发的原因 - 递归 globbing 可能依赖于操作系统。 根据您的 shell 和操作系统以及 TypeORM 在内部扩展星号的方式(我不知道),在 bash Z2591C98B70119FE624898B1E42 开始之前运行shopt -s globstar
也可能会削减它。
除此之外,您的路径当然也需要匹配src/
前缀,所以我假设您的情况下的 subscriber/ subscriber/PersonSubscriber.ts
实际上是src/subscriber/PersonSubscriber.ts
。
另请注意,TypeORM 也有一种相当独特的解析选项的方式,以防您在环境变量、配置文件或 createConnection() 选项中有多个配置定义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.