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

基于ES6/Node.js v16将Express部署到AWS Lambda的问题

解决AWS Lambda中ES6模块下Express应用的Handler导出问题

你的核心问题是没搞清楚Lambda对ES6模块导出的要求,以及serverless-http的正确使用方式,以下是具体解决方案:

错误原因

你之前写的代码导出了一个需要接收app参数的函数,但Lambda运行时会直接尝试加载导出的handler,不会主动给你传递app参数;同时Lambda默认会寻找命名导出的handler,而不是默认导出的函数,这就导致了HandlerNotFound错误。

正确的两种实现方式

方式一:命名导出handler(推荐)

在你的Express应用文件中,直接把用serverless-http包装好的app作为命名的handler导出:

import express from 'express';
const app = express();

// 这里写你的路由、中间件配置
app.get('/', (req, res) => {
  res.send('Hello from Lambda!');
});

import serverless from 'serverless-http';

// 关键:直接导出命名的handler
export const handler = serverless(app);

这种方式不需要修改serverless配置,Lambda会自动识别到导出的handler函数。

方式二:默认导出+修改serverless配置

如果你想用默认导出,需要在serverless.yml里指定加载默认导出:

functions:
  your-function-name:
    handler: app.default  # 这里的app是你的文件名,.default表示加载默认导出
    # 其他配置(比如触发器等)

对应的代码:

import express from 'express';
const app = express();

// 路由和中间件配置
app.get('/', (req, res) => {
  res.send('Hello from Lambda!');
});

import serverless from 'serverless-http';

export default serverless(app);

注意事项

  • 确保package.json中已经设置"type": "module",让Node.js将文件识别为ES6模块。
  • 不要将handler写成需要接收参数的函数,Lambda运行时不会传入app,必须在同一个文件中创建好app实例并直接包装导出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 13:50:25