Serverless NestJS使用serverless-offline运行后请求无响应如何解决
Serverless NestJS serverless-offline本地请求无响应排查方案
- 校验
serverless.ymlhandler配置正确性
确认functions块下对应函数的handler路径和你lambda.ts的导出完全匹配,比如你lambda.ts存放在src目录下,导出的方法名为handler,配置应为handler: src/lambda.handler,路径错误会导致请求命中后无法触发入口逻辑,直接无响应返回。 - 核对serverless-offline版本的路径规则差异
如果你使用serverless-offline v10及以上版本,默认不再强制拼接stage路径前缀,你可以在custom.serverless-offline配置中添加noPrependStageInUrl: false保留/dev前缀,或者直接请求http://localhost:3000测试。 - 排查lambda.ts入口逻辑问题
必须保证入口逻辑使用了正确的serverless适配层,且缓存了初始化的服务实例,正确写法参考:import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import { ExpressAdapter } from '@nestjs/platform-express'; import * as serverlessExpress from '@vendia/serverless-express'; import { Context, Handler } from 'aws-lambda'; import * as express from 'express'; let cachedServer: Handler; async function bootstrap() { if (!cachedServer) { const expressApp = express(); const app = await NestFactory.create(AppModule, new ExpressAdapter(expressApp)); await app.init(); cachedServer = serverlessExpress({ app: expressApp }); } return cachedServer; } export const handler = async (event: any, context: Context, callback: any) => { const server = await bootstrap(); return server(event, context, callback); }; - 检查端口占用和路由注册情况
启动前确认3000端口无其他服务占用,也可在启动命令后加--port 3001切换端口测试。同时查看serverless-offline启动日志中的路由打印列表,确认你的hello接口路由被正确注册,没有被全局前缀覆盖。 - 验证接口路径匹配规则
如果你的AppController的hello接口配置的路径是/hello,而非根路径/,需要请求http://localhost:3000/dev/hello才能命中接口。
内容的提问来源于stack exchange,提问作者yangseungbin
相关产品推荐
相关产品推荐

