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配置:- 服务端webpack配置中把
oracledb标记为外部依赖,不参与打包:
// webpack.server.config.js module.exports = { // 其他原有配置 externals: ['oracledb'] }- 前端webpack配置中忽略
oracledb模块,避免打包:
// webpack.client.config.js const webpack = require('webpack') module.exports = { // 其他原有配置 plugins: [ new webpack.IgnorePlugin({ resourceRegExp: /^oracledb$/ }) ] } - 服务端webpack配置中把
- 接口转发调用
彻底拆分前后端逻辑:前端只负责发请求到Node服务端,由服务端执行Oracle查询逻辑,再把结果返回给前端,从根源上避免前端加载到数据库操作相关代码。 - 运行时环境判断兼容
如果确实存在同一份代码需要在前后端都执行的场景,添加环境判断,仅在Node环境下加载oracledb:let oracledb // 仅Node环境下才引入 if (typeof window === 'undefined') { oracledb = require('oracledb') // 所有oracledb相关逻辑都放在这个判断内执行 }
内容的提问来源于stack exchange,提问作者oyster0118
相关产品推荐
相关产品推荐

