我正在查找一個註冊系統。我使用節點,表達和我的數據庫是PostgreSQL。我使用最新的pg module與Postgre溝通。查詢在第二次執行時掛起
我的用戶獲取功能是多用途的,根據用戶名或用戶名獲取用戶。 (後端)
User.get = function (info,t, fn){
var text;
if(t=="id"){
text = "SELECT user.id, user.usrnm FROM user WHERE user.id=$1";
}
else{
text = "SELECT user.id, user.usrnm, user.role FROM user WHERE user.usrnm=$1";
}
var query = client.query({ text:text, values:[info]}, function(err, result){
if(err) {return fn(err);}
query.on("row", function (row, result) {
result.addRow(row);
});
if(result.rows.length==0){//no user found
return fn(err, null);
query.on("end", function(){client.end();});
}
if(t=="id"){
return fn(null, new User({
id:result.rows[0].id,
usrnm:result.rows[0].usrnm
})
);
query.on("end", function(){clientGuest.end();});
}
else{
return fn(null, new User({
id:result.rows[0].id,
usrnm:result.rows[0].usrnm,
role:result.rows[0].role
})
);
query.on("end", function(){clientGuest.end();});
}
});
query.on("end", function(){clientGuest.end();});
}
因此,我使用上述來檢查是否有用戶已經在使用用戶名。如果沒有,我保存新用戶(註冊)(前端)
User.get(username, "name", function(error, user){
if(error) return next(err);
if(user!=null){//so, we found a user
res.error("Username already in use");
res.redirect('back');
res.end();
}
else{
user = new User ({
usrnm:username,
pswrd:userpass
});
user.save(function(err){
if(err) return next(err);
req.session.uid=user.id;
})
res.redirect('/');
res.end();
}
})
});
無論我插入已被使用唯一的用戶名或一個,第一時間一切運作良好,第二次,該數據被髮送到User.get
,並在此之後停止。
我在查詢中放了幾個console.log
,只有一個返回數據。在User.get = function (info,t, fn){
之後的那個顯示t
和info
的值。所有其他console.log
什麼也沒有顯示。
我不知道如何解決這個問題。也許它的細節我沒有得到。 Plaese幫助。
感謝
你確定它是查詢掛起而不是你的web服務器?查看可能的相關問題:http://stackoverflow.com/questions/34521804/pg-promise-hangs-after-six-queries。如果它與node-postgres相關,請查看[pg-promise](https://github.com/vitaly-t/pg-promise),它使用起來更容易。 –
@ vitaly-t查看我的答案,並請評論,如果我說得對。謝謝 – slevin