Vue.js+Vite+TypeScript连接MongoDB时util.promisify非函数错误
解决Vite中MongoDB依赖的util.promisify无效问题
方案1:替换util的polyfill为完整实现
rollup-plugin-node-polyfills提供的util polyfill不包含promisify方法,改用官方utilnpm包可解决这个问题:
- 安装依赖:
npm install util --save-dev
- 修改
vite.config.ts的resolve.alias,替换原有的util指向:
resolve: { alias: { // 替换这一行 util: 'util', // 其余alias配置保持不变 }, },
- 在
optimizeDeps中添加util到include列表,确保Vite正确预构建这个依赖:
optimizeDeps: { include: ['util'], esbuildOptions: { define: { global: "globalThis", }, plugins: [ NodeGlobalsPolyfillPlugin({ process: true, buffer: true, }), NodeModulesPolyfillPlugin(), ], }, },
方案2:手动注入promisify polyfill
如果方案1仍无效,可在项目入口文件(如main.ts)中手动全局注入promisify:
import { promisify } from 'util'; globalThis.promisify = promisify;
然后在vite.config.ts的esbuildOptions中添加全局定义,让MongoDB依赖能识别这个方法:
optimizeDeps: { esbuildOptions: { define: { global: "globalThis", 'util.promisify': 'globalThis.promisify' }, // 其余配置不变 }, },
关键安全提示
MongoDB官方明确不推荐在浏览器前端直接连接Atlas实例——这种做法会泄露数据库凭证,导致数据泄露或恶意操作风险。正确的架构应该是搭建后端服务,由后端处理数据库连接,前端通过API与后端交互。
内容的提问来源于stack exchange,提问作者Jordan Pisani
相关产品推荐
相关产品推荐

