adam-cowley / neode

Neo4j OGM for Node.js
MIT License
394 stars 72 forks source link

TypeError: metatype is not a constructor - Neode DynamicModule with model NestJs #150

Closed 4lessandrodev closed 3 years ago

4lessandrodev commented 3 years ago

I am trying to create a simple global module for use with templates, but I was unable to resolve this error. How to use nestJS module with neode models ?

see a minimal simulation

check github repository

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { NeodeModule } from './neode-module/neode.module';

@Module({
  imports: [NeodeModule.forRoot()],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
import { DynamicModule, Module } from '@nestjs/common';
import Neode from 'neode';
import { UserSchema } from './user.schema';

@Module({})
export class NeodeModule {
  static forRoot(): DynamicModule {
    return {
      module: NeodeModule,
      global: true,
      providers: [
        {
          provide: Neode,
          useFactory: () => Neode.fromEnv().with({ User: UserSchema }),
        },
      ],
      exports: [
        {
          provide: Neode,
          useFactory: () => Neode.fromEnv(),
        },
      ],
    };
  }
}
TypeError: metatype is not a constructor
    at Injector.instantiateClass (/home/alessandro/Workspace/Projects/teste/node_modules/@nestjs/core/injector/injector.js:286:19)
    at callback (/home/alessandro/Workspace/Projects/teste/node_modules/@nestjs/core/injector/injector.js:42:41)
    at async Injector.resolveConstructorParams (/home/alessandro/Workspace/Projects/teste/node_modules/@nestjs/core/injector/injector.js:114:24)
    at async Injector.loadInstance (/home/alessandro/Workspace/Projects/teste/node_modules/@nestjs/core/injector/injector.js:46:9)
    at async Injector.loadProvider (/home/alessandro/Workspace/Projects/teste/node_modules/@nestjs/core/injector/injector.js:68:9)
    at async Promise.all (index 3)
    at async InstanceLoader.createInstancesOfProviders (/home/alessandro/Workspace/Projects/teste/node_modules/@nestjs/core/injector/instance-loader.js:43:9)
    at async /home/alessandro/Workspace/Projects/teste/node_modules/@nestjs/core/injector/instance-loader.js:28:13
    at async Promise.all (index 2)
    at async InstanceLoader.createInstances (/home/alessandro/Workspace/Projects/teste/node_modules/@nestjs/core/injector/instance-loader.js:27:9)

nest-neo4j works perfectly, but I can't use models and relationship.

4lessandrodev commented 3 years ago

I posted this error to the nestjs community and it was resolved by importing all Neode resources

import * as Neode from 'neode';