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

Vue.js+Vite+TypeScript连接MongoDB时util.promisify非函数错误

解决Vite中MongoDB依赖的util.promisify无效问题

方案1:替换util的polyfill为完整实现

rollup-plugin-node-polyfills提供的util polyfill不包含promisify方法,改用官方utilnpm包可解决这个问题:

  1. 安装依赖:
npm install util --save-dev
  1. 修改vite.config.ts的resolve.alias,替换原有的util指向:
resolve: {
  alias: {
    // 替换这一行
    util: 'util',
    // 其余alias配置保持不变
  },
},
  1. 在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 02:57:51