這是我在我的index.js中的一些代碼。它等待該用戶訪問url.com/proxy,然後加載我的代理頁面,這實際上只是一個發送電子郵件和代碼的表單。從我的MongoDB數據庫中,我使用代碼獲取用戶訂單,其中包含我需要的一些信息(如產品和他們試圖獲得的消息)。出於某種原因,它在收到此信息之前似乎已經做出了迴應,然後在下次提交表單時持有該信息。res.send()不發送當前響應,而是保留最後一個
我res.send換行符(產品+「\ n」 +消息)心不是任何工作,但現在那不是什麼大不了的事。
但是...例如,我第一次填寫表格生病得到一個空白的響應。第二次,我會收到我填寫的第一份表格的回覆,然後第三次得到第二份回覆。我對Web開發相當陌生,感覺我正在做一些明顯錯誤的事情,但似乎無法弄清楚。任何幫助將不勝感激,謝謝。
app.get('/proxy', function(req,res){
res.sendFile(__dirname+ "/views/proxy.html");
});
var message = "";
var product = "";
app.post('/getMessage', function(req,res)
{
returnMsg(req.body.user.code, req.body.user.email);
//res.setHeader('Content-Type', 'text/plain');
res.send(product + "\n" + message);
});
function returnMsg(code, email){
MongoClient.connect(url, function(err, db){
var cursor = db.collection('Orders').find({ "order_id" : Number(code) })
cursor.each(function(err, doc){
assert.equal(err, null);
if (doc!= null)
{
message = doc["message"];
product = doc["product"];
}
else {
console.log("wtf");
// error code here
}
});
console.log(email + " + " + message);
var document = {
"Email" : email,
"Message" : message
}
db.collection("Users").insertOne(document);
db.close();
});
}
這不是nodejs的工作方式。如果db操作結束,您必須傳遞給returnMsg()一個回調函數來執行。你正在嘗試在節點中進行同步編程,而這是一個異步的環境。看到這個示例以及如何使用回調函數:https://gist.github.com/fwielstra/1025038 – Oscar