Weaviate JS/TS Client v3在Next.js中所有方法失效求助
问题排查与修复方案
一、Docker Compose配置检查
- 必须确保Weaviate正确集成Ollama向量嵌入器,环境变量配置完整:
- 开启
ENABLE_MODULES=text2vec-ollama - 配置
OLLAMA_API_URL=http://ollama:11434(容器间通过服务名互通,不能用localhost) - 确认端口映射正常(默认8080),用
docker ps检查Weaviate、Ollama容器是否正常运行
- 开启
- 参考正确配置片段:
version: '3.4' services: weaviate: image: semitechnologies/weaviate:1.24.11 ports: - "8080:8080" - "50051:50051" environment: QUERY_DEFAULTS_LIMIT: 20 AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true' PERSISTENCE_DATA_PATH: "./data" ENABLE_MODULES: text2vec-ollama OLLAMA_API_URL: http://ollama:11434 CLUSTER_HOSTNAME: 'node1' ollama: image: ollama/ollama:latest ports: - "11434:11434" volumes: - ./ollama:/root/.ollama
二、Next.js服务器组件客户端使用修正
由于page.tsx是服务器组件,需注意以下几点:
- 客户端初始化必须在服务器环境完成,连接参数匹配运行场景:
- 本地直接运行Next.js用
host: 'localhost:8080';若Next.js也在容器内,改用Weaviate服务名weaviate:8080
- 本地直接运行Next.js用
- 所有异步操作必须加
await,确保流程等待执行完成 - 必须在请求头指定Ollama使用的模型,否则无法完成向量化
- 修正后的示例代码:
import { WeaviateClient, connectToWeaviate } from 'weaviate-ts-client'; async function handleWeaviateOperations() { let client: WeaviateClient | null = null; try { // 初始化客户端 client = connectToWeaviate({ scheme: 'http', host: 'localhost:8080', headers: { 'X-Ollama-Model': 'llama3' }, // 指定Ollama模型 }); // 检查集合是否存在 const exists = await client.collections.exists('Podcasts'); console.log('Podcasts集合是否存在:', exists); // 创建集合(配置Ollama向量化) if (!exists) { const createResult = await client.collections.create({ name: 'Podcasts', vectorizer: 'text2vec-ollama', vectorIndexConfig: { distance: 'cosine' }, }); console.log('集合创建结果:', createResult); } // 插入数据 const insertResult = await client.collections.data.insertMany('Podcasts', [ { title: 'Episode 1', content: 'Next.js 14新特性详解' }, { title: 'Episode 2', content: 'Weaviate向量数据库入门' }, ]); console.log('插入数据结果:', insertResult); // 遍历数据 const iterator = client.collections.data.iterator('Podcasts'); for await (const obj of iterator) { console.log('遍历到的数据:', obj.properties); } } catch (error) { console.error('操作失败:', error); } finally { if (client) { // 删除集合并等待执行完成 const deleteResult = await client.collections.delete('Podcasts'); console.log('集合删除结果:', deleteResult); // 二次验证删除状态 const existsAfterDelete = await client.collections.exists('Podcasts'); console.log('删除后Podcasts集合是否存在:', existsAfterDelete); } } } // 服务器组件中调用操作 export default async function Home() { await handleWeaviateOperations(); return <div>Weaviate操作已执行,查看控制台日志</div>; }
三、关键错误点排查
- 遗漏
await:所有客户端方法都是异步Promise,不加await会直接跳过执行,导致操作未生效 - 未指定Ollama模型:Weaviate无法调用Ollama生成向量,会导致集合创建、数据插入失败
- Docker网络隔离:若Next.js与Weaviate不在同一Docker网络,会出现连接超时,可通过
docker network inspect <网络名>确认 - 数据目录权限:确保Weaviate容器对
PERSISTENCE_DATA_PATH目录有读写权限,避免数据无法持久化
四、日志排查建议
- 查看Weaviate容器日志:
docker logs <weaviate-container-id>,检查是否有Ollama连接失败、向量生成错误信息 - 查看Ollama容器日志:
docker logs <ollama-container-id>,确认模型是否已成功拉取 - 查看Next.js控制台输出,排查连接超时、请求失败等错误
内容的提问来源于stack exchange,提问作者Rok Benko
相关产品推荐
相关产品推荐

