nestjs连接oracle
1、下载安装
npm install @nestjs/typeorm typeorm oracledb
2、配置typeOrm
TypeOrmModule.forRootAsync({name: "oracle",inject: [ConfigService],useFactory: async (configService: ConfigService) => {return {type: 'oracle',...configService.get('db.oracle'),logger: 'advanced-console',timezone: '+08:00',entities: [__dirname + '/../**/*.entity.{js,ts}'],} as TypeOrmModuleOptions;},
}),
如果启动不报错最好,如果报错code为NJS-138,说明需要本地安装 Oracle Instant Client
选择自己的系统点击,进入后选择下图第一个,大概一百兆左右,进行下载即可
下载好后打开是这个样子的
然后根目录创建一个文件夹(oracle-client),将这些文件复制到文件夹下,如图:
1、在main.ts中函数的顶部进行手动指定 Oracle 客户端库(OCI - Oracle Call Interface)的加载位置
try {await oracledb.initOracleClient({libDir: path.join(__dirname, '../oracle-client')});
} catch (e) {console.log(e);process.exit(1);
}
2、在服务启动后监听进程退出
['SIGINT', 'SIGTERM'].forEach((event) => {process.once(event, async () => {await app.close();console.log('关闭服务');process.exit(0);});});
完整代码如下:
import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import { ConfigService } from '@nestjs/config'; import { ValidationPipe } from '@nestjs/common'; import helmet from 'helmet'; import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; import oracledb from 'oracledb'; import path from 'path'; import { DataSource } from 'typeorm'; async function bootstrap() {/*** oracledb*/try {await oracledb.initOracleClient({libDir: path.join(__dirname, '../oracle-client')});} catch (e) {console.log(e);process.exit(1);}const app = await NestFactory.create(AppModule, {// logger:false,});// 获取配置文件const configService = app.get(ConfigService);// 全局前缀app.setGlobalPrefix(configService.get('app.prefix') ?? 'api');//管道app.useGlobalPipes(new ValidationPipe({whitelist: true, //过滤掉方法处理程序不应该接收的属性transform: true, //根据其 DTO 类自动将有效负载转换为类型化的对象}),);// 安全防护app.use(helmet());// 集成Swaggerconst config = new DocumentBuilder().setTitle('测试接口文档').setDescription('接口文档').setVersion('1.0').addTag('测试').build();const documentBuilder = () => SwaggerModule.createDocument(app, config);SwaggerModule.setup('swagger-ui', app, documentBuilder());// 启动服务. '0.0.0.0'设置是为了记录ipV4await app.listen(configService.get('app.port') ?? 3000, '0.0.0.0');/*** 监听进程退出*/['SIGINT', 'SIGTERM'].forEach((event) => {process.once(event, async () => {await app.close();console.log('关闭服务');process.exit(0);});});console.log(`Application is running on: http://localhost:${configService.get('app.port') ?? 3000}`,); } bootstrap();
ctrl+c结束进程时有个报错,暂无没有好的办法去除,不影响程序的运行,大家有好的方法也可以评论区告诉我