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

Nuxt.js项目使用Milvus 2 Node.js SDK遇构造函数错误求助

问题:Nuxt.js应用中使用Milvus Node.js SDK出现浏览器错误

我正在开发一个Nuxt.js应用,选用Milvus作为数据库实现相似性搜索,但浏览器控制台出现错误。

代码片段

app.vue

// 其他代码

<script setup lang="ts">
import { MilvusClient } from "@zilliz/milvus2-sdk-node";

// 此处还有其他与Milvus无关的代码,我认为无关紧要

(async () => {
  const milvusClient = new MilvusClient({
    address: "localhost:19530",
    username: "",
    password: "",
  });

  // 相似性搜索
  const test = await milvusClient.search({
    collection_name: "xxxxx", // 我的集合名称
    vector: [ // 我的向量数据 ],
  });

  // 按分数降序排序结果
  const sortedResults = test.results.sort((a, b) => b.score - a.score);

  // 输出带分数的描述信息
  sortedResults.forEach((result) => {
    console.log(`[${result.score}]: ${result.description}`);
  });
})();
</script>

package.json

{
  "name": "nuxt-app",
  "private": true,
  "type": "module",
  "scripts": {
    "build": "nuxt build",
    "dev": "nuxt dev",
    "generate": "nuxt generate",
    "preview": "nuxt preview",
    "postinstall": "nuxt prepare"
  },
  "devDependencies": {
    "autoprefixer": "^10.4.16",
    "nuxt": "^3.9.3",
    "postcss": "^8.4.33",
    "tailwindcss": "^3.4.1",
    "vue": "^3.4.6",
    "vue-router": "^4.2.5"
  },
  "dependencies": {
    "@nuxt/ui": "^2.10.0",
    "@zilliz/milvus2-sdk-node": "^2.3.5",
    "nuxt-security": "^1.1.0"
  }
}

错误信息

TypeError: Class extends value undefined is not a constructor or null
    at node_modules/@grpc/grpc-js/build/src/call.js (@zilliz_milvus2-sdk-node.js?v=bfe1cc22:10658:54)
    at __require (chunk-PIXRU2QS.js?v=bfe1cc22:10:50)
    at node_modules/@grpc/grpc-js/build/src/client.js (@zilliz_milvus2-sdk-node.js?v=bfe1cc22:11182:18)
    at __require (chunk-PIXRU2QS.js?v=bfe1cc22:10:50)
    at node_modules/@grpc/grpc-js/build/src/make-client.js (@zilliz_milvus2-sdk-node.js?v=bfe1cc22:11562:20)
    at __require (chunk-PIXRU2QS.js?v=bfe1cc22:10:50)
    at node_modules/@grpc/grpc-js/build/src/channelz.js (@zilliz_milvus2-sdk-node.js?v=bfe1cc22:11663:25)
    at __require (chunk-PIXRU2QS.js?v=bfe1cc22:10:50)
    at node_modules/@grpc/grpc-js/build/src/subchannel.js (@zilliz_milvus2-sdk-node.js?v=bfe1cc22:12227:22)
    at __require (chunk-PIXRU2QS.js?v=bfe1cc22:10:50)

我用dpdm app.vue排查循环依赖,未发现问题,遵循官方示例仍无法解决。


解决方案

这个错误的核心原因是Milvus Node.js SDK是为Node.js环境设计的,无法直接在浏览器中运行。SDK依赖的@grpc/grpc-js库包含Node.js专属API(如网络、文件系统相关模块),浏览器环境不支持这些API,导致加载失败。

解决步骤如下:

1. 将Milvus操作移至Nuxt后端(Server Route)

在Nuxt中创建Server Route来处理Milvus交互,前端通过API调用获取结果:

创建Server Route文件 server/api/milvus-search.ts

import { MilvusClient } from "@zilliz/milvus2-sdk-node";

export default defineEventHandler(async (event) => {
  const milvusClient = new MilvusClient({
    address: "localhost:19530",
    username: "",
    password: "",
  });

  // 获取前端传入的向量数据
  const { vector } = await readBody(event);

  // 执行相似性搜索
  const searchResult = await milvusClient.search({
    collection_name: "xxxxx",
    vector: vector,
  });

  // 排序结果
  const sortedResults = searchResult.results.sort((a, b) => b.score - a.score);

  return sortedResults.map(result => ({
    score: result.score,
    description: result.description
  }));
});

2. 修改前端代码调用API

更新app.vue中的脚本,通过$fetch调用后端API:

// 其他代码

<script setup lang="ts">
// 移除MilvusClient的导入

(async () => {
  try {
    // 调用后端API
    const sortedResults = await $fetch('/api/milvus-search', {
      method: 'POST',
      body: {
        vector: [/* 你的向量数据 */]
      }
    });

    // 输出结果
    sortedResults.forEach((result: any) => {
      console.log(`[${result.score}]: ${result.description}`);
    });
  } catch (error) {
    console.error('搜索失败:', error);
  }
})();
</script>

3. 验证依赖配置

确保@zilliz/milvus2-sdk-node仅在后端环境中使用,无需额外配置,Nuxt会自动将Server Route中的依赖打包到后端。

额外说明

  • 永远不要在浏览器环境中直接连接Milvus数据库,这会暴露数据库地址、凭证等敏感信息,存在严重安全风险。
  • 如果需要在前端处理向量相关逻辑,可以使用浏览器兼容的向量库(如ml-distance),但数据库交互必须通过后端代理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:12:36