You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nuxt中间件运行node-oracledb出现NJS-069错误如何解决

根本原因

oracledb是Node.js专属原生模块,依赖Node底层API和操作系统的Oracle客户端库,完全无法在浏览器环境运行。你现在能正常获取数据,是因为这段逻辑在服务端已经执行成功了,浏览器控制台报错是webpack打包时把服务端专属代码也打包进了前端产物,浏览器加载后运行失败。

解决方案

  • 优先做环境代码隔离
    如果你用的是Next.js、Nuxt.js这类全栈框架,把这段Oracle查询逻辑放在服务端专属目录即可:比如Next.js的pages/api/、app/api目录,Nuxt3的server/目录,框架会自动区分前后端代码,不会把服务端逻辑打包到前端。
  • 调整webpack配置
    如果是自定义搭建的SSR项目,分别调整前后端webpack配置:
    1. 服务端webpack配置中把oracledb标记为外部依赖,不参与打包:
    // webpack.server.config.js
    module.exports = {
      // 其他原有配置
      externals: ['oracledb']
    }
    
    1. 前端webpack配置中忽略oracledb模块,避免打包:
    // webpack.client.config.js
    const webpack = require('webpack')
    module.exports = {
      // 其他原有配置
      plugins: [
        new webpack.IgnorePlugin({ resourceRegExp: /^oracledb$/ })
      ]
    }
    
  • 接口转发调用
    彻底拆分前后端逻辑:前端只负责发请求到Node服务端,由服务端执行Oracle查询逻辑,再把结果返回给前端,从根源上避免前端加载到数据库操作相关代码。
  • 运行时环境判断兼容
    如果确实存在同一份代码需要在前后端都执行的场景,添加环境判断,仅在Node环境下加载oracledb:
    let oracledb
    // 仅Node环境下才引入
    if (typeof window === 'undefined') {
      oracledb = require('oracledb')
      // 所有oracledb相关逻辑都放在这个判断内执行
    }
    

内容的提问来源于stack exchange,提问作者oyster0118

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 13:45:03