使用Serverless Framework部署Express至AWS Lambda遇500错误求助
部署Serverless Express应用到AWS Lambda时出现500内部服务器错误调试求助
我基于Node.js、Express和MongoDB构建了一个后端应用,本地运行完全正常,但通过Serverless Framework部署至AWS Lambda环境后,使用Postman调用API时收到500内部服务器错误,请求协助调试。
配置详情
- 框架:Serverless Framework
- 环境:AWS Lambda(Node.js运行时)
- API结构:
- 使用Express作为Web框架
- 路由包含/api/v1/users/login、/api/v1/videos等
- 已启用CORS
- 已实现错误处理
错误响应
调用API端点时收到如下响应:
{ "message": "Internal Server Error" }
代码文件
src/index.js
import dotenv from "dotenv"; import connectDB from "./db/index.js"; import { app } from "./app.js"; import serverless from "serverless-http"; dotenv.config({ path: "./.env", }); connectDB() .then(() => { app.on("error", (error) => { console.log("ERROR: ", error); throw error; }); app.listen(process.env.PORT || 8000, () => { console.log(`Server is running at port: ${process.env.PORT}`); }); }) .catch((error) => { console.log("MONGODB connection failed !!! ", error); }); export const handler = serverless(app);
src/app.js
import express from "express"; import cors from "cors"; import cookieParser from "cookie-parser"; const app = express(); app.use( cors({ origin: process.env.CORS_ORIGIN, credentials: true, }) ); // setting for handling json app.use( express.json({ limit: "16kb", }) ); //setting for URLS app.use( express.urlencoded({ extended: true, limit: "16kb", }) ); app.use(express.static("public")); //config cookie-parse app.use(cookieParser()); // routes import import userRouter from "./routes/users.routes.js"; import videoRouter from "./routes/video.routes.js"; import commentRouter from "./routes/comment.routes.js"; import likeRouter from "./routes/like.routes.js"; import tweetRouter from "./routes/tweet.routes.js"; import subscriptionRouter from "./routes/subscription.routes.js"; import playlistRouter from "./routes/playlist.routes.js"; import dashboardRouter from "./routes/dashboard.routes.js"; import { ApiError } from "./utils/ApiError.js"; //routes declaration app.use("/api/v1/users", userRouter); app.use("/api/v1/videos", videoRouter); app.use("/api/v1/comments", commentRouter); app.use("/api/v1/likes", likeRouter); app.use("/api/v1/tweets", tweetRouter); app.use("/api/v1/subscription", subscriptionRouter); app.use("/api/v1/dashboard", dashboardRouter); app.use("/api/v1/playlist", playlistRouter); app.use((err, req, res, next) => { if (err instanceof ApiError) { // Send a JSON response with the error details return res.status(err.statusCode).json({ success: err.success, message: err.message, errors: err.errors, }); } // For other errors, send a generic 500 response // res.status(500).json({ // success: false, // message: "An unexpected error occurred.", // }); }); export { app };
serverless.yml
service: playtube-api provider: name: aws runtime: nodejs20.x region: ap-south-1 environment: PORT: ${env:PORT} CORS_ORIGIN: ${env:CORS_ORIGIN} MONGODB_URI: ${env:MONGODB_URI} ACCESS_TOKEN_SECRET: ${env:ACCESS_TOKEN_SECRET} ACCESS_TOKEN_EXPIRY: ${env:ACCESS_TOKEN_EXPIRY} REFRESH_TOKEN_SECRET: ${env:REFRESH_TOKEN_SECRET} REFRESH_TOKEN_EXPIRY: ${env:REFRESH_TOKEN_EXPIRY} CLOUDINARY_CLOUD_NAME: ${env:CLOUDINARY_CLOUD_NAME} CLOUDINARY_API_KEY: ${env:CLOUDINARY_API_KEY} CLOUDINARY_API_SECRET: ${env:CLOUDINARY_API_SECRET} CLOUDINARY_URL: ${env:CLOUDINARY_URL} functions: api: handler: src/index.handler events: - httpApi: path: /{proxy+} method: ANY plugins: - serverless-dotenv-plugin
这是我首次使用Serverless Framework部署后端服务。
内容的提问来源于stack exchange,提问作者Sarib Jawad
相关产品推荐
相关产品推荐

