2017-06-16 136 views
-2

我正在嘗試對express.js服務器執行簡單的xhttp GET請求。不幸的是,我沒有收到這段代碼的回覆數據。連接狀態良好,因爲我已成功使用「res.send」從服務器發回主體。xhttp獲取請求到express.js服務器 - 沒有任何返回

我不確定我在服務器上使用「findOne」是否不正確,或者我在客戶端上使用的xhttp不正確。我懷疑這是客戶。

我會很感激任何建議。

*客戶端代碼*

function getfood() { 
    var xhttp = new XMLHttpRequest(); 
    xhttp.open("GET", "http://localhost:3000/clientfood", true); 
    xhttp.send(); 
} 

*服務器代碼 - Express.js /節點*

app.get('/clientfood', cors(), (req, res) => { 
    //res.send('test'); //this works at least 
    db.collection('quotes').findOne({ 
    "_id": ObjectId("12345") 
    }, 
    { 
    name: 1, 
    quote: 1 
    }) 
}) 
+0

什麼'findOne'回報? '承諾'? – acdcjunior

+0

我的意思是...我沒有看到你發送迴應數據或閱讀回覆數據的地方...... –

+0

請指定你正在使用的確切數據庫? – jfriend00

回答

1

xhttp GET請求到服務器express.js - 沒有返回

您的服務器代碼不會返回響應。您需要執行諸如res.send(...)res.json(...)之類的操作,以將響應返回給調用者,並且您需要在回調中執行此操作,即數據庫提供的用於傳回查詢結果的回調函數(在大多數數據庫中,您可以使用普通回調或承諾)。

您的客戶端代碼不會偵聽響應。對於所示here on MDN和通常會怎麼做例子:

function getfood() { 
    var xhttp = new XMLHttpRequest(); 
    xhttp.addEventListener("load", function() { 
     if (xhttp.status === 200) { 
      // have data in xhttp.responseText, process it here 
     } else { 
      // got some other response here 
     } 
    }); 
    xhttp.open("GET", "http://localhost:3000/clientfood", true); 
    xhttp.send(); 
} 
+0

@jogoeire - 如果這回答了您的問題或讓您回答了問題,那麼您可以通過點擊最能幫助您的答案旁邊的綠色複選標記來向社區表明這一點。這也將爲您在遵循正確的程序時在計算器上獲得一些聲望點。 – jfriend00

0

感謝這麼多 - 尤其是@ jfriend00。我有很多東西需要了解這些框架是如何工作的。在收到您對SEND的建議後,我在前臺看到結果時有點麻煩。我收到了「承諾待決」的消息。我用這篇文章中建議的代碼修復了這個問題。 Express - Promise pending when loop queries 此外,我修改了我的findOne函數來獲取我的id的整個對象。

最終代碼:

app.get('/clientfood', cors(), (req, res) => { 
mydata = db.collection('quotes').findOne(
{ 
"_id": ObjectId("12345") 
}) 
// promise code 
Promise.all([mydata]).then(listOfResults => { 
    res.send(JSON.stringify(listOfResults)) //for example 
}, err => { 
    res.send(500, JSON.stringify(err)); // for example 
}); 

}) 
相關問題