我在引导函数中启用了关闭挂钩。我还在我的模块之一订阅了应用程序关闭挂钩:
public async onApplicationShutdown(signal): Promise<void>
{
console.log({signal});
...
}
Run Code Online (Sandbox Code Playgroud)
现在我可以Ctrl+C在终端上按下并阅读一条很棒的消息。然后我的资源释放工作正常。
如果数据库连接失败,我也想关闭我的应用程序:
export class MyDbAccessImplementation {
constructor() {
this._pool = createPool(some);
this._pool.query(`SELECT 'test' AS TEST`, (err) => {
if (err !== null) {
console.error(err);
process.emit('SIGINT');
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,我的 onApplicationShutdown 方法不会因数据库连接错误而触发,并且应用程序会立即关闭。
如何从其组件触发 Nest.js 应用程序关闭?
请原谅我的这些异端言论,但从开发者体验的角度来看,我认为express是构建api的最佳库。但阻止我在任何地方使用它的是每个人都一直说(并通过基准测试确认)它很慢。
\n\n我尝试为自己选择一个替代方案,但我无法\xd1\x8dt找到适合我的。
\n\n例如,使用express我可以简单地组织以下结构:
\nuserAuthMiddleware.js
export const userAuthMiddleware = (req, res, next) => {\n console.log(\'user auth\');\n next();\n};\nRun Code Online (Sandbox Code Playgroud)\n\nadminAuthMiddleware.js
\n\nexport const adminAuthMiddleware = (req, res, next) => {\n console.log(\'admin auth\');\n next();\n};\nRun Code Online (Sandbox Code Playgroud)\n\nsetUserRoutes.js
\n\nexport const setUserRoutes = (router) => {\n router.get(\'/news\', (req, res) => res.send([\'news1\', \'news2\']));\n router.get(\'/news/:id\', (req, res) => res.send(`news${req.params.id}`));\n};\nRun Code Online (Sandbox Code Playgroud)\n\nsetAdminRoutes.js
\n\nexport const setAdminRoutes = (router) => {\n router.post(\'/news\', (req, res) => res.send(\'created\'));\n router.put(\'/news/:id\', (req, res) => res.send(\'uodated\'));\n};\nRun Code Online (Sandbox Code Playgroud)\n\nuserApi.js
\n\nimports...\n\nconst userApi …Run Code Online (Sandbox Code Playgroud) admin-bro-nestjs 存储库包含一个全面的示例,其中包含 mongoose 的示例。但我需要将它与 typeorm 和 postgres 一起使用。
我尝试将此示例改编为 typeorm:
// main.ts
import AdminBro from 'admin-bro';
import { Database, Resource } from '@admin-bro/typeorm';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
AdminBro.registerAdapter({ Database, Resource });
const bootstrap = async () => {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
Run Code Online (Sandbox Code Playgroud)
和
// app.module.ts
import { Module } from '@nestjs/common';
import { AdminModule } from '@admin-bro/nestjs';
import { TypeOrmModule, getRepositoryToken } from '@nestjs/typeorm';
import { Repository …Run Code Online (Sandbox Code Playgroud) node.js ×3
nestjs ×2
admin-bro ×1
express ×1
fastify ×1
middleware ×1
postgresql ×1
routes ×1
typeorm ×1