Mat*_*vic 6 mongodb node.js typeorm
考虑以下设置mongodb(问题可能与数据库无关):
实体/人物.ts
import { Entity, Column } from 'typeorm';
@Entity
export class Person {
@Column()
name: string;
}
Run Code Online (Sandbox Code Playgroud)
订阅者/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);
}
}
Run Code Online (Sandbox Code Playgroud)
配置/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',
},
};
Run Code Online (Sandbox Code Playgroud)
索引.ts
import { createConnection } from 'typeorm';
import { mongoConfig } from 'config/mongo';
createConnection(mongoConfig)
.then(connection => {
console.log('connection established');
})
.catch(console.error);
Run Code Online (Sandbox Code Playgroud)
PersonSubscriber是数组的第一个元素connection.subscribers,但是在插入人员文档后,它InsertEvent不会记录到控制台。
少了什么东西?
PS这是我设法收集的所有文档
https://github.com/typeorm/typeorm/blob/master/docs/listeners-and-subscribers.md
http://typeorm.delightful.studio/classes/_connection_connection_.connection.html#subscribers
总而言之,他们仍然没有讲述完整的故事。
小智 10
文件名必须是 name.subscribe.ts
或配置
"subscribers": ["dist/**/**/**/*.subscriber{.ts,.js}"]
Run Code Online (Sandbox Code Playgroud)
为我工作
phi*_*294 -2
检查您的通配符:
subscribers: ['src/subscriber/**/*.ts']
Run Code Online (Sandbox Code Playgroud)
可能需要
subscribers: ['src/subscriber/*.ts']
Run Code Online (Sandbox Code Playgroud)
相反,可能有第二个*.js文件条目。至少这就是为什么我的订阅者没有解雇的原因 - 递归通配符可能依赖于操作系统。根据您的 shell 和操作系统以及 TypeORM 在内部扩展星号的方式(我不知道),shopt -s globstar在启动节点进程之前在 bash shell 中运行也可能会减少它。
除此之外,当然,您的路径也需要与src/前缀匹配,所以我假设subscriber/PersonSubscriber.ts您的情况实际上是src/subscriber/PersonSubscriber.ts.
另请注意,TypeORM 还有一种相当独特的解析选项的方式,以防您在环境变量、配置文件或 createConnection() 选项中有多个配置定义。
| 归档时间: |
|
| 查看次数: |
15961 次 |
| 最近记录: |