簡體   English   中英

NodeJS / MongoDB唯一值檢查

[英]NodeJS/MongoDB Unique Value Check

我正在MEAN堆棧上開發一個短暫的加密聊天室,並且想知道如何最好地構造這段代碼...

我想要達到的目標:

  • 收到POST請求以創建聊天室。
  • 生成隨機的8個字符串,該字符串將成為roomid(與mongo _id分開)
  • 需要確保該字符串在數據庫中尚不存在。 如果是這樣,我需要運行生成器並再次保存。

我有這段代碼顯然不起作用,因為對數據庫的調用是異步的,並且會導致線程崩潰。

var chatroom = new Chatroom();
        var roomid = random.generate(8).toUpperCase();
        var unique = false;

        while (!unique) {
            Chatroom.count({roomid: roomid}, function (error, data) {
                if (data < 1) {
                    chatroom.roomid = roomid;
                    chatroom.roomtitle = request.body.roomtitle;
                    chatroom.passphrase = request.body.passphrase;
                    unique = true;
                }
            });
        }

        chatroom.save(function (error) {
            if (error) {
                response.json(apiResponse('fail', error));
            }
            else {
                response.json(apiResponse('success', chatroom));
            }
        });

關於如何更好地構建此代碼的任何建議?

我對MongoDB感到有些生疏,但這也許會有所幫助:

var chatroom = new Chatroom();

function generate() {    
    var roomid = random.generate(8).toUpperCase();
    Chatroom.find({roomid: roomid}, function (error, data) {
        if (data.length) {
            chatroom.roomid = roomid;
            chatroom.roomtitle = request.body.roomtitle;
            chatroom.passphrase = request.body.passphrase;
            save();
        }
        else {
            generate();
        }
    });
}

function save () {  
    chatroom.save(function (error) {
        if (error) {
            response.json(apiResponse('fail', error));
        }
        else {
            response.json(apiResponse('success', chatroom));
        }
    });
}

我通常發現遞歸是實現這些迭代解決方案的更好方法-至少更直觀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM