簡體   English   中英

在結束響應之前就觸發成功

[英]success is fired before end response

作為Web開發人員的初學者,我正在使用純node.js構建我的第一個Web應用程序。 在注冊部分,表單數據將從客戶端發布到服務器,然后添加到數據庫。 成功后,客戶端將根據收到的響應來操作DOM。 但是,總是在發送響應之前觸發成功回調。

客戶端代碼:

$.post('/register.db', {
        data: JSON.stringify(user),
        contentType: "application/json",
        dataType: "text",
        success: function(data){
            alert(data);
            if(response == register.exists){
                $(".login-form>input:nth-child(3)").append("<span>This email has already been used</span>");
            }
            else if(response == register.success){
                $(".login-wrapper>span").html("Proceed to login");
                $(".register-wrapper").html("");
            }
        }
    });

服務器端代碼:

                    var body = "";
                    req.on("error", function(){
                        handleError();
                    }).on("data", function(chunk){
                        body += chunk;
                    }).on("end", function(){

                        // success callback is fired as soon as request ends
                        // code afterwards is executed after success callback
                        // but response is written in db.register() function
                        var user = JSON.parse(qs.parse(body).data);
                        console.log("user ",user);
                        res.on('error', function(err){
                            handleError();
                        });
                        db.register(res, user);
                    });

---編輯:添加了數據庫代碼-

數據庫代碼:

register:
        function(res, user){
            var account = user['email'];
            client.sismember('users', account, function(err, response){
                res.statusCode = 200;
                res.setHeader('Content-type', 'text/plain');
                // account already exists
                if(response != 0){
                    res.write(register.exists);
                    res.end();
                    return;
                }
                client.sadd("users", account);
                client.hmset(account, "pin", user.pin, "first_name", user.first_name, "last_name", user.last_name);
                res.write(register.success);
                res.end();
                return;
            });
        }

有什么好心的人請指出我哪里出了問題嗎? 我會很感激!

我將客戶端代碼更改為下面的代碼,並且神奇地工作了……我只是用匿名回調函數替換了成功回調函數……任何人都知道這兩種定義成功回調函數的區別嗎?

$.post('/register.db',
            {
                data: JSON.stringify(user),
                contentType: "application/json",
                dataType: "text"
            },
            function(data){
                alert(data);
                if(response == register.exists){
                    $(".login-form>input:nth-child(3)").append("<span>This email has already been used</span>");
                }
                else if(response == register.success){
                    $(".login-wrapper>span").html("Proceed to login");
                    $(".register-wrapper").html("");
                }
            });

暫無
暫無

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

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