当前位置: 首页 > 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.xdnf.cn/news/1401877.html

相关文章:

  • WIFI模块-USB-UART-SDIO
  • Manus AI 与多语言手写识别技术全解析
  • U-Boot移植过程中的关键目录文件解析
  • fastdds qos:LifespanQosPolicy
  • 【C++】类和对象(终章)
  • 第二十六天-待机唤醒实验
  • 信息系统架构
  • v-model ,在 vue3和 vue2中的区别
  • Linux(1)|入门的开始:Linux基本指令
  • 认识Redis
  • IDM手机端,速度能提高6倍!
  • CPU的MBR寄存器和MDR寄存器
  • 联合体和枚举——嵌入式学习笔记
  • Linux IO复用
  • 优选算法:二分查找
  • 数据库攻略:“CMU 15-445”Project0:C++ Primer(2024 Fall)
  • 《Java反射与动态代理:从原理到实践》
  • SpringBoot整合Actuator实现健康检查
  • MIT 6.5840 (Spring, 2024) 通关指南——Lab 1: MapReduce
  • GitHub 热榜项目 - 日榜(2025-08-30)
  • 基于Ubuntu本地GitLab 搭建 Git 服务器
  • 解构机器学习:如何从零开始设计一个学习系统?
  • 【LeetCode】大厂面试算法真题回忆(121) —— 经典屏保
  • 并发编程——09 CountDownLatch源码分析
  • Spring Boot 后端接收多个文件的方法
  • 项目管理常用的方法有哪些
  • 三菱 PLC的中断指令/中断指针
  • 构建现代化的“历史上的今天“网站:从API到精美UI的全栈实践
  • 北方苍鹰优化算法优化的最小二乘支持向量机NGO-LSSVM多输入多输出回归预测【MATLAB】
  • 2025年06月 Scratch 图形化(二级)真题解析#中国电子学会#全国青少年软件编程等级考试