Express アプリが構成を編集する要求を受け取ったら、同時実行数 1 で構成されたasync.js キューに項目を追加します。これにより、リモート構成を編集する同時試行が 1 回を超えるのを防ぐことができます。擬似コードは次のようになります。
- アプリの起動時に、
updateNetworkConfig
関数を定義します
- アプリの起動時に、同時実行数 1 のキューを作成します
var networkQueue = async.queue(updateNetworkConfig, 1);
- REST は PUT /api/config/network のように、JSON のリクエスト ボディとして新しい構成を使用します。
- アイテムをキューに追加し、新しい構成データを渡します
networkQueue.push(req.body.config);
- (
req.body
bodyParser connect ミドルウェアが提供)
- 独立した構成ごとにそのセットアップを繰り返します: ファイルシステムなど
コールバックを処理し、構成が保存されたときに REST クライアントに通知するには、他の多くの配管が必要になります。通話をキューに入れるか、キューが空でない場合に新しい通話を拒否するかは、あなた次第です。
非同期プログラミングの流暢さを向上させ、貴重なことを教えてくれる素晴らしい async.js ライブラリを学習したり使用したりしないことを主張しているので、ここで取り引きします。変数と呼ばれるものを使用します。
var updatingNetwork = false;
app.put('/api/config/network', function (req, res) {
if (updatingNetwork) {
return res.status(409).send("Try later");
}
updatingNetwork = true;
updateNetworkConfig(req.body.config, function (error) {
updatingNetwork = false;
if (error) {
return res.status(500).send(error);
}
res.status(200).send("done");
});
});
- リクエストが入ったとき、
updatingNetwork
が true の場合、進行中の更新が既にあることがわかります。これをキューに入れるか、拒否します。