这对我有用……不像我想要的那样优雅,但它有效;我希望只有一个服务/提供者访问我的数据库,而不是每个模块的服务,即使这也有效。所以我坚持使用 myModule->myResolver->myService-->Neo4jService 的 Nest 格式。所以 Neo4jService 被注入到所有的 xService(s) 中。我在必要时使用 neo4jGraphql 和 augmentSchema 和 Cypher。
代码:
**appmodule.ts**
....
import { makeExecutableSchema } from 'graphql-tools';
import { v1 as neo4j } from 'neo4j-driver';
import { augmentTypeDefs, augmentSchema } from 'neo4j-graphql-js';
import { Neo4jService } from './neo4j/neo4j.service';
import { MyModule } from './my/my.module';
import { MyResolver } from './my/my.resolver';
import { MyService } from './my/my.service';
....
import { typeDefs } from './generate-schema'; // SDL type file
...
const driver = neo4j.driver('bolt://localhost:3000', neo4j.auth.basic('neo4j', 'neo4j'))
const schema = makeExecutableSchema({
typeDefs: augmentTypeDefs(typeDefs),
});
const augmentedSchema = augmentSchema(schema); // Now we have an augmented schema
@Module({
imports: [
MyModule,
GraphQLModule.forRoot({
schema: augmentedSchema,
context: {
driver,
},
}),
],
controllers: [],
providers: [ Neo4jService,
myResolver,
],
})
export class AppModule {}
**myResolver.ts**
import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
import { MyService } from './my.service';
@Resolver('My')
export class MyResolver {
constructor(
private readonly myService: MyService) {}
@Query()
async getData(object, params, ctx, resolveInfo) {
return await this.myService.getData(object, params, ctx, resolveInfo);
}
*//Notice I am just passing the graphql params, etc to the myService*
}
**myService.ts**
import { Injectable } from '@nestjs/common';
import { Neo4jService } from '../neo4j/neo4j.service';
@Injectable()
export class MyService {
constructor(private neo4jService: Neo4jService) {}
async getData(object, params, ctx, resolveInfo) {
return await this.neo4jService.getData(object, params, ctx, resolveInfo);
}
*// Again I am just passing the graphql params, etc to the neo4jService*
}
**neo4jService.ts**
import { Injectable } from '@nestjs/common';
import { neo4jgraphql } from 'neo4j-graphql-js';
@Injectable()
export class Neo4jService {
getData(object, params, ctx, resolveInfo) {
return neo4jgraphql(object, params, ctx, resolveInfo);
}
.....
......
}
所以基本上我推迟了使用 neo4jgraphql,直到我们到达 neo4jService。现在我所有的数据库调用都在这里......正如我所说的不优雅但它有效。
挑战:Graphql generate 不接受@relation...我发现已经进行了更改,现在您需要 augmentTypeDefs。
...希望这可以帮助
编辑
Nestjs 需要很长时间来处理 augmentSchema ......所以我建议跳过它......现在