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

Quasar 2.3应用使用LangChain TextLoader报错:readFile is not a function

问题分析与解决

错误原因

TextLoader 是LangChain为Node.js后端环境设计的文件加载器,它依赖Node.js内置的fs.readFile API读取本地文件。而你的Quasar应用运行在浏览器前端环境中,浏览器没有提供fs模块,因此无论文件路径是否正确,都会触发readFile is not a function的错误,和路径无关。

解决方案

方案1:前端通过File API读取本地用户上传的文件

如果需要让用户上传本地文件并处理,直接使用浏览器原生的File API,无需依赖TextLoader:

// 在Vue组件中添加文件上传input
<template>
  <input type="file" @change="handleFileUpload" accept=".txt">
</template>

<script setup>
import { Document } from "langchain/document";
import { CharacterTextSplitter } from "langchain/text_splitter";

const handleFileUpload = async (event) => {
  const file = event.target.files[0];
  if (!file) return;

  // 读取文件内容
  const text = await file.text();
  // 手动构建Document对象
  const doc = new Document({ pageContent: text, metadata: { filename: file.name } });
  
  // 后续可以用CharacterTextSplitter拆分文档
  const splitter = new CharacterTextSplitter({
    chunkSize: 1000,
    chunkOverlap: 200,
  });
  const splitDocs = await splitter.splitDocuments([doc]);
  // 处理拆分后的文档
};
</script>

方案2:前端通过Fetch加载服务器上的文件

如果文件存放在服务器上,直接用fetch请求获取内容后构建Document:

import { Document } from "langchain/document";

const loadServerFile = async () => {
  const response = await fetch("/path/to/your/file.txt");
  const text = await response.text();
  const doc = new Document({ 
    pageContent: text, 
    metadata: { source: "/path/to/your/file.txt" } 
  });
  // 后续处理逻辑
};

方案3:将文件加载逻辑移至Node.js后端

如果必须使用TextLoader,可以把文件读取、文档拆分逻辑放到Node.js后端服务中,前端通过API调用获取处理后的结果:

// 后端Node.js代码示例(Express为例)
import express from "express";
import { TextLoader } from "langchain/document_loaders/fs/text";
import { CharacterTextSplitter } from "langchain/text_splitter";

const app = express();

app.get("/load-file", async (req, res) => {
  try {
    const loader = new TextLoader("./path/to/your/file.txt");
    const docs = await loader.load();
    const splitter = new CharacterTextSplitter({
      chunkSize: 1000,
      chunkOverlap: 200,
    });
    const splitDocs = await splitter.splitDocuments(docs);
    res.json(splitDocs);
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

app.listen(3000);

前端通过fetch调用这个接口即可获取处理后的文档数据。

关于版本兼容性

LangChain的组件更新频繁,但此问题核心是环境不匹配,而非版本兼容。后续使用LangChain组件时,需注意区分前端浏览器环境和Node.js后端环境的API差异,避免混用后端专属工具。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 16:23:29