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

无法通过AWS Lambda函数提供PDF文件的问题排查

AWS Lambda + Express 404错误排查与解决

问题背景

将包含index.js与document.pdf(同根目录)的压缩包上传至AWS Lambda控制台,使用Express和serverless-http编写代码,配置HTTP API端点后访问URL出现404错误,已尝试调整多种配置仍未解决。

现有代码

const express = require("express");
const serverless = require("serverless-http");
const path = require("path");

const app = express();

app.all("/", (req, res, next) => {
    res.set('Content-Type', 'application/pdf');
  res.sendFile(path.join(__dirname, "./document.pdf"));
});

module.exports.handler = serverless(app);

相关配置说明

  • API配置:HTTP API已集成目标Lambda函数,路由配置为默认的/$default(或自定义路径)
  • 文件系统:Lambda代码包根目录下存在index.js和document.pdf两个文件

可能的问题点及解决方法

1. API Gateway路由与Express路由不匹配

AWS HTTP API默认集成路径可能带阶段名(如/dev)或使用/{proxy+}通配,而你的Express仅监听根路径/,导致请求实际路径不匹配。

  • 解决方法:
    • 调整Express路由匹配实际请求路径:若API端点为https://xxx.execute-api.region.amazonaws.com/dev,则修改路由为/dev
    app.all("/dev", (req, res, next) => {
        res.set('Content-Type', 'application/pdf');
      res.sendFile(path.join(__dirname, "./document.pdf"));
    });
    
    • 配置serverless-http自动剥离前缀:
    module.exports.handler = serverless(app, { basePath: '/dev' });
    
    • 在API Gateway中修改路由,将根路径/直接集成到Lambda,移除阶段前缀或设置阶段为根路径。

2. Lambda环境路径拼接问题

Lambda中__dirname的路径指向可能和本地环境不同,导致文件查找失败。可尝试替换路径写法:

// 简化路径拼接
res.sendFile(`${__dirname}/document.pdf`);
// 或使用process.cwd()获取代码根目录
res.sendFile(path.join(process.cwd(), "document.pdf"));

3. 未处理通配路径

若API Gateway路由为/{proxy+},Express需处理所有子路径,调整路由为通配符:

app.all("/*", (req, res, next) => {
    res.set('Content-Type', 'application/pdf');
  res.sendFile(path.join(__dirname, "./document.pdf"));
});

4. 查看Lambda日志定位具体错误

登录AWS CloudWatch,找到对应Lambda的日志组:

  • 若日志显示Error: ENOENT: no such file or directory,说明文件路径错误,需调整路径写法
  • 若显示路由不匹配,说明请求路径未被Express处理,需调整路由配置

5. 确认API Gateway集成配置正确

检查API Gateway集成是否关联到目标Lambda,Payload format version需设置为2.0(serverless-http支持该格式),同时确保无错误的路径重写或请求参数配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:42:22