Javascript 带有typescript的不稳定AWS lambda行为

Javascript 带有typescript的不稳定AWS lambda行为,javascript,typescript,amazon-web-services,aws-lambda,Javascript,Typescript,Amazon Web Services,Aws Lambda,我在将代码上传到aws lambda时发现了一个非常奇怪的行为。 一旦代码部署完毕,我和postman一起到达了端点,第一次就可以正常运行了。我第二次点击它时会出现以下错误: { "error": "Validation error" } 如果我重新部署,它将工作一次,然后再次中断。如果我在本地运行它,它将永远不会中断 我已将问题指向一行代码: this._repo.save(user) 模型保存在数据库中很好,但我收到了那个错误。有人遇到过这样的问题吗?这种行为的原因可能是什么 这

我在将代码上传到aws lambda时发现了一个非常奇怪的行为。 一旦代码部署完毕,我和postman一起到达了端点,第一次就可以正常运行了。我第二次点击它时会出现以下错误:

{
    "error": "Validation error"
}
如果我重新部署,它将工作一次,然后再次中断。如果我在本地运行它,它将永远不会中断

我已将问题指向一行代码:

this._repo.save(user)
模型保存在数据库中很好,但我收到了那个错误。有人遇到过这样的问题吗?这种行为的原因可能是什么

这是密码

  public signUp(event: APIGatewayEvent): Observable<APIGatewayProxyResult> {
    return this.register(event).pipe(
      concatMap(user => {
        const body = parseBody(event);
        //if we find a referrer we add a new entry in the db

        const createUserObservable = of(this.generateUserResponse(user, true));
        const saveReferralObservable = body.referrerId ?  this.referralService.save(user.id, body.referrerId) : of({});

        return combineLatest([createUserObservable, saveReferralObservable])
      }),
      map((res) => {
        return Response.ok(res[0].body, res.headers)
      }),
      catchError((err) => of(Response.errorResponse(err)))
    );
  }


 private register(event: APIGatewayEvent): Observable<UserInfosModel> {
    const body = parseBody(event);

    return this._repo.findBy({email: body.email}).pipe(
      map(user => {
        if (user) {
          throw new BadRequestError('This email is already registered');
        }
      }),
      concatMap(() => encryptPassword(body.password)),
      map(password => {
        body.password = password;
        return this.createUserModel(body, event.queryStringParameters);
      }),
      concatMap(user => this._repo.save(user))
    );
  }
公共注册(事件:APIGatewayEvent):可观察{
返回此.register(event).pipe(
concatMap(用户=>{
const body=parseBody(事件);
//如果我们找到了推荐人,我们会在数据库中添加一个新条目
const createUserObservable=of(this.generateUserResponse(user,true));
const saveReferralObservable=body.refererId?this.referelService.save(user.id,body.refererId):of({});
返回CombineTest([createUserObservable,saveReferralObservable])
}),
地图((分辨率)=>{
返回Response.ok(res[0]。正文,res.headers)
}),
catchError((err)=>of(Response.errorResponse(err)))
);
}
专用寄存器(事件:APIGatewayEvent):可观察{
const body=parseBody(事件);
返回此。_repo.findBy({email:body.email}).pipe(
映射(用户=>{
如果(用户){
抛出新的BadRequestError(“此电子邮件已注册”);
}
}),
concatMap(()=>encryptPassword(body.password)),
映射(密码=>{
body.password=密码;
返回此.createUserModel(body、event.queryStringParameters);
}),
concatMap(用户=>this.\u repo.save(用户))
);
}

提前感谢

当您遇到这种问题时,您的函数很可能不是幂等函数

Lambda不保证您的功能的干净启动。这是一项可以重复使用以前的执行容器和(旧的)临时磁盘空间的功能

请检查您的函数,看看它是否在上下文空间中留下了不需要的变量、未关闭的流、剩余的DBcontext等等


我终于找到了解决办法。 我使用@Default decorator为sequelize中的每个新模型生成一个新的uuid。
在阅读了上下文之后,我意识到创建的uuid总是相同的。因此,当创建第一个模型时,uuid将保留在上下文中,任何后续插入都将使用相同的uuid,直到运行新的上下文并生成新的上下文为止。因此,我没有遵循sequelize typescript@Default decorator,而是使用beforeCreate钩子手动生成一个id。这解决了问题

如果不了解代码在引擎盖下运行的内容,就无法了解更多信息,但是这肯定不是一个typescript问题,而是一个javascript问题。因为typescript可以转换为javascript,并且只删除类型;它不会改变代码的执行。发布代码。您是否在全局范围内设置了一些内容?我没有在全局范围内设置任何内容,除了与数据库的连接之外,所有逻辑都在函数内部。有趣的是,只有当我保存到数据库时,它才会失败,但当我检索时,它就可以了。