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
相关产品推荐
相关产品推荐

