当前位置: 首页 > news >正文

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结束进程时有个报错,暂无没有好的办法去除,不影响程序的运行,大家有好的方法也可以评论区告诉我

http://www.dtcms.com/a/359121.html

相关文章:

  • 大模型备案、算法备案补贴政策汇总【广东地区】
  • SNMPv3开发--snmptrapd
  • CNB远程部署和EdgeOne Pages
  • More Effective C++ 条款18:分期摊还预期的计算成本(Amortize the Cost of Expected Computations)
  • 数据库的CURD
  • Shell 秘典(卷三)——循环运转玄章 与 case 分脉断诀精要
  • C语言类型转换踩坑解决过程
  • Java高并发架构核心技术有哪些?
  • 安装Redis
  • compute:古老的计算之道
  • 【ROS2】ROS2 基础学习教程 、movelt学习
  • Docker实战避坑指南:从入门到精通
  • plantsimulation知识点 多条RGV驮一台工件图标显示顺序问题
  • lumerical_FDTD_光源_TFSF
  • 【AI】【强化学习】强化学习算法总结、资料汇总、个人理解
  • php连接rabbitmq例子
  • SpringCloud学习笔记
  • 大模型应用开发面试全流程实录:RAG、上下文工程与多Agent协作技术深度解析
  • ABAP 刷新屏幕
  • 【C++】日期类实现详解:代码解析与复用优化
  • BEV-VAE
  • 3000. 对角线最长的矩形的面积
  • 配置vsc可用的C语言环境
  • Linux系统统计用户登录和注销时间的工具之ac
  • Dify的搭建
  • Glato - AI 驱动的广告视频创作平台
  • [光学原理与应用-329]:ZEMAX - 主要用途与主要功能
  • Python爬虫实战:研究统计学方法,构建电商平台数据分析系统
  • Windows驱动开发与双机调试环境[驱动开发环境配置高阶]
  • [创业之路-582]:评估难易程度、重要程度,站在不同的角度有不同的答案