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

