我们在AWS上有一个MySQL数据库,我们使用的是带有CDK的lambdas,构建在TypeScrip上。我们在不同的Lambdas上有许多CRUD操作。然而,在一个lambda上,表上的行的更新不起作用。在本地数据库上运行的集成测试运行良好,受影响的行会给出预期的结果。但是,在AWS上运行此用例,调用经过集成测试的确切方法,根本没有任何效果。该操作返回0个受影响的行,并且不会引发任何ValidationError,尽管事务更改了数据字段。我们已经尝试使用Sequelize UPDATE方法和SAVE方法。一个有趣的方面是,如果我们更新旧的字段,更新查询就可以很好地工作。对于全新的油田,更新不起作用。对于本地集成测试数据库和AWS数据库,新字段的数据库迁移运行方式相同。这个团队无法解决这个问题。有什么主意吗?
代码示例:
async function updateMyValuesInUserDb(myParam: string, user: UserDbModel): Promise<void> {
try {
const value1 = getValue1(myParam)
const value2 = getValue2(myParam)
user.myNewField1 = value1
user.myNewField2 = value2
await user.save()
}
模型:
@Table({
tableName: 'User',
freezeTableName: true
})
export class UserDbModel extends Model {
@PrimaryKey
@AutoIncrement
@Unique
@Column
id!: number
@Column
username: string
@Column
firstName: string
@Column
lastName: string
@IsEmail
@Unique
@Column
email: string
@Default(false)
@Column
myNewField1: boolean
@AllowNull(true)
@Default(null)
@Column
myNewField2: number
@UpdatedAt
@Column
updatedAt: Date
}
2条答案
按热度按时间2ledvvac1#
我怀疑
getValue1()
和getValue2()
函数是异步调用,需要应用await
关键字,以便运行时将等待Promises
到resolve
。xu3bshqb2#
问题是,尽管集成测试使用的是最新的用户模型,但部署到AWS上的代码使用的是过时的用户模型,这是因为Package.json中的一个包已过时。我们使用符号链接来连接包,而从本地部署应该将符号链接考虑在内。不幸的是,符号链接只适用于集成测试。如果我们打开部署/构建的代码,并搜索新的字段,我们本可以更早地发现这一点。