Я занимаюсь разработкой средства сокращения ссылок, и для моего бэкэнда у меня есть CRUD REST API для обработки аутентификации и создания сокращенных ссылок и т. Д. c. Я также хочу обрабатывать перенаправления для сокращенных URL-адресов, но я не хочу они должны иметь тот же путь, что и мои конечные точки API (например, /api/v1/
), поскольку я использую setGlobalPrefix
для своего API. Проведя некоторые исследования в Интернете, я обнаружил следующую проблему Github , которая дала мне решение моей проблемы:
async function bootstrap() {
const server = new ExpressAdapter();
const apiFactory = new NestFactoryStatic();
const apiApp = await apiFactory.create(ApiModule, server);
apiApp.setGlobalPrefix('api/v1');
await apiApp.init();
const redirectFactory = new NestFactoryStatic();
const redirectApp = await redirectFactory.create(RedirectModule, server);
await redirectApp.init();
http
.createServer(server.getInstance())
.listen(process.env.PORT || 3000);
}
bootstrap();
Но я столкнулся с другой проблемой, мне нужен доступ к моей базе данных в мой RedirectModule
, у меня уже есть LinkRepository
, созданный для моего REST API, но я не смог импортировать его в RedirectModule
, вот код для ApiModule
и то, что я уже пробовал.
@Module({
imports: [TypeOrmModule.forRoot(typeOrmConfig), LinksModule, AuthModule],
controllers: [LinksController],
providers: [],
})
export class ApiModule {}
С RedirectModule
просто пытаюсь импортировать LinkRepository
как такую функцию:
@Module({
imports: [TypeOrmModule.forFeature([LinkRepository])],
controllers: [RedirectController]
})
export class RedirectModule {}
Я получаю следующую ошибку:
Nest can't resolve dependencies of the LinkRepository (?). Please make sure that the argument Connection at index [0] is available in the TypeOrmModule context.
Potential solutions:
- If Connection is a provider, is it part of the current TypeOrmModule?
- If Connection is exported from a separate @Module, is that module imported within TypeOrmModule?
@Module({
imports: [ /* the Module containing Connection */ ]
})
Итак, у меня есть попытался импортировать ApiModule
в RedirectModule
, а также экспортировать TypeOrmModule.forRoot(typeOrmConfig)
в отдельный файл и импортировать его в оба модуля, но затем я получаю сообщение об ошибке, сообщающее, что соединение уже существует: AlreadyHasActiveConnectionError: Cannot create a new connection named "default", because connection with such name already exist and it now has an active connection session.
Итак, как я могу разделить соединение между двумя отдельными модулями? Просмотр документации Nest не помог, поскольку предполагается, что все модули являются частью одного большого root модуля, а это не то, что я пытаюсь сделать.
Редактировать: Похоже, что основной проблемой является совместное использование модуля в приложении, так как я создаю 2 приложения с разными фабриками, он попытается снова подключиться к базе данных, поскольку кажется, что модули являются одиночными только в одном приложении. Есть ли какая-то работа вокруг этого? Или, альтернативно, еще один способ добиться того, что я пытаюсь сделать? (Другой префикс URL для одного указанного c модуля)