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

Node.js中移fsPromises.readFile至模块后请求异常的解决办法

解决方法

1. 修正模块中的文件路径

Node.js模块的相对路径是基于模块自身所在目录,而非调用它的server.js目录。原来的./input.pdf在模块中可能指向错误位置,改用绝对路径避免问题:

const fsPromises = require('fs').promises;
const path = require('path');

async function readPdfAsArrayBuffer() {
  // 生成基于模块目录的绝对路径
  const filePath = path.resolve(__dirname, './input.pdf');
  try {
    const fileBuffer = await fsPromises.readFile(filePath);
    return new Uint8Array(fileBuffer).buffer;
  } catch (err) {
    console.error('读取文件失败:', err); // 打印完整错误信息
    throw err; // 抛出错误让调用方处理,避免吞掉异常
  }
}

module.exports = { readPdfAsArrayBuffer };

2. 确保异步流程等待文件读取完成

如果调用模块函数时未等待文件读取完成就发起请求,会导致请求因数据未准备好中断,触发Provisional headers are shown错误。调用时必须等待Promise完成:

const { readPdfAsArrayBuffer } = require('./your-module.js');

// 示例:在请求处理逻辑中调用
async function handlePost() {
  try {
    const pdfBytes = await readPdfAsArrayBuffer();
    // 等待文件读取完成后再发送XMLHttpRequest
    const xhr = new XMLHttpRequest();
    xhr.open('POST', '/your-target-url', true);
    xhr.setRequestHeader('Content-Type', 'application/pdf');
    xhr.onload = function() {
      // 处理响应逻辑
    };
    xhr.send(pdfBytes);
  } catch (err) {
    // 处理文件读取或请求错误
    console.error('请求处理失败:', err);
  }
}

3. 排查请求中断的其他可能

  • 检查代码中是否存在xhr.abort()调用,或服务器端提前终止响应的逻辑;
  • 如果是浏览器端请求,确认目标地址是否存在CORS配置问题;
  • 查看服务器端完整错误日志,确认文件读取是否有权限不足、文件不存在等具体问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:10:35