在 Node.js 中处理多个请求

Handle multiple request in Node.js

如何同时处理多个请求?我找不到与 Nestjs 和 prisma 相关的任何内容。有人有推荐的文章吗?

举个简单的例子 - 假设我正在建立电子商务 API。我在 Nestjs 中简化了 orderService。业务逻辑说,用户不能在一个订单中应用超过 1 个优惠券。假设用户以某种方式同时从 UI 发送两个单独的请求。两个请求的条件 order.vouchers.length > 1 都为真,结果接受并更新了两个凭证。

@Injectable('')
export class OrderService {
    constructor(private readonly database: DatabaseService) {}
    
    async applyVoucher(voucherDto: voucherDto) {
        const order = await this.database.orders.findOne({where: {id: voucherDto.orderId}})
        
        if (order.vouchers.length > 1) {
            return new HttpException('Can not add more than 2 voucher', 400);
        }
        
        await someHeavyWorkFunction()
        
        await this.database.orders.update({ where:{ id: voucherDto.orderId}, data: { vouchers: [...order.vouchers, voucherDto.voucher]}})
    
}

如果我调用我的 API 端点,该端点解析同时连续三次调用此服务,预期行为是 2 个请求成功通过,最后一个请求失败。然而,情况并非如此,所有 3 个请求都通过了数据库中的 3 个凭证。

您可以使用 transactions,请按照此 tutorial

A database transaction symbolizes a unit of work performed within a database management system (or similar system) against a database and treated in a coherent and reliable way independent of other transactions. A transaction generally represents any change in a database. Transactions in a database environment have two main purposes:

如果你想为你的项目使用像 Typeorm 这样的 ORM,你可以使用这个 tutorial