bugfix> javascript > 投稿

express.jsで現在別のリクエストが処理されている場合にリクエストを防ぐ方法はありますか? 私はこのようなコードを持っています

try {
    if (currency == 'BTC') {
      let options = {
        symbol: symbol,
        side: 'BUY',
        type: 'MARKET',
        quantity: amount,
        timestamp: Date.now()
      }
      let order = await api.placeOrder(options);
      if (order.status == 200) {
        res.status(200).send({ message: 'Order successfully placed' });
      } else {
        res.status(500).send({ message: 'Failed to place order' });
      }
    } else if (currency == 'DASH') {
      let options = {
        symbol: 'DASHUSDT',
        side: 'BUY',
        type: 'MARKET',
        quantity: amount,
        timestamp: Date.now()
      }
      let order = await api.placeOrder(options);
      if (order.status == 200) {
        res.status(200).send({ message: 'Order successfully placed' });
      } else {
        res.status(500).send({ message: 'Failed to place order' });
      }
    } else {
      res.status(400).send({ message: 'Invalid currency' });
    }
  } catch (err) {
    console.log(err);
    res.status(500).send({ message: 'Internal server error' });
  }

基本的にユーザーはウェブサイトからビットコインを購入できますが、問題は、1つのアカウントを2人以上で使用できる場合があり、購入ボタンを同時に押すと2回注文する場合に備えてです。現在処理中の場合、他のユーザーによる注文を禁止する方法はありますか?

回答 1 件
  • これは非常に大雑把な例であり、すべてのニーズを考慮に入れていない可能性がありますが...多分そうなるでしょうか?

    const locks = {};
    app.post('route', function(req, res) {
        const routeLockKey = 'route:' + user.id;
        if (locks[routeLockKey]) return res.error; // error here somewow
        // if we got here, the route isn't locked for this user
        locks[routeLockKey] = true;
        try {
            // your code here
        } catch(e) {
            // error handling here
        } finally {
            delete locks[routeLockKey];
        } 
        
    });
    
    

あなたの答え