AWS Lambda调用Node.js无服务器函数报错:server is not a function
解决AWS Lambda中"server is not a function"错误
问题原因
你遇到的TypeError: server is not a function错误,是因为aws-serverless-express的createServer方法返回的是一个包含proxy方法的对象,而非可直接调用的函数。你当前代码里直接把server当作函数执行,这不符合库的使用规范。
修正代码
将你的handler部分修改为调用server对象的proxy方法即可:
import express from 'express'; import routes from './startup/routes.js'; import db from './startup/db.js'; import { createServer } from 'aws-serverless-express'; const app = express(); routes(app); db(); const server = createServer(app); // 改用proxy方法处理事件和上下文 export const handler = (event, context, callback) => { server.proxy(event, context, callback); };
如果你的Lambda运行环境支持Promise(Node.js 14+),也可以用async/await的写法:
export const handler = async (event, context) => { return new Promise((resolve, reject) => { server.proxy(event, context, (err, result) => { err ? reject(err) : resolve(result); }); }); };
额外检查项
- 确保已正确安装依赖:执行
npm install aws-serverless-express --save,避免使用过时版本的库。 - 确认Lambda的Node.js运行时版本与依赖兼容(推荐使用18.x或20.x版本)。
- 打包部署时,确保所有依赖项都被包含在部署包中(比如用zip打包时不要遗漏
node_modules文件夹,或使用Serverless Framework等工具自动处理)。
内容的提问来源于stack exchange,提问作者Chirag Maurya
相关产品推荐
相关产品推荐

