[英]Node.js res.json() and res.send(), not working but still able to change status code
我已經閱讀了幾乎所有關於此的主題,但仍然無法弄清楚出了什么問題。
客戶端不會收到任何信息,無論是 res.send()、res.json()、res.write() res.end()。 但是我知道信息正在發送和存儲,因為數據庫正在更新,並且我知道有響應,因為我可以控制台記錄 object 並且如果我更改服務器的狀態代碼(例如 200 與 201)打印的響應在客戶端反映了這一點。
客戶端通過郵寄方式將 email 發送到服務器。
var object = JSON.stringify({
email: myemail,
});
await fetch('http://localhost:4000/api/subscriber/', {
method: 'POST',
body: object,
headers: {
'Content-Type': 'application/json'
}
}).then(res => {
res.json();
console.log(res);})
.then(response => console.log('Success:', response))
.catch(error => console.error('Error:', error));
當我運行它時,這些是日志:
響應 {type: "cors", url: "http://localhost:4000/api/subscriber/", 重定向: false, status: 201, ok: true, ...}
成功:未定義
這是相關的服務器端代碼
路徑調用一個 function
app.post('/api/subscriber/', (request, response) => {
db.createSubscriber(request, response);
})
然后將信息存儲在數據庫中並發送響應。 這就是問題所在——我嘗試在這里發送的任何內容——甚至隨機文本都不會顯示,但我知道通信正在發生,因為當我更改它時,我可以看到從客戶端記錄的狀態代碼。
const createSubscriber = (request, response) => {
const { firstname, lastname, email } = request.body;
const text = //SQL query
const values = [firstname, lastname, email]
pool.query(text, values, (error, results) => {
if (error) {
console.log('error');
response.status(400);
throw error;
} else {
response.status(201).json({status:201,id:results.insertID});
}
return response;
})
}
我嘗試了不同的發送、分配變量和使用方法。然后,進行了大量的小調整。 我不知道我在這里做錯了什么。
謝謝您的幫助!
使用瀏覽器中的fetch()
, res.json()
返回一個新的 promise ,您必須等待帶有await
或 .then .then()
) 的 promise 才能從中獲取數據。
所以,你會這樣做:
await fetch('http://localhost:4000/api/subscriber/', {
method: 'POST',
body: object,
headers: {
'Content-Type': 'application/json'
}
}).then(res => res.json()).then(data => {
console.log(data);
}).catch(error => console.error('Error:', error));
此外,在服務器端,您的錯誤處理需要一些修復。 改變這個:
if (error) {
console.log('error');
response.status(400);
throw error;
}
對此:
if (error) {
console.log(error);
response.sendStatus(400);
}
您必須始終發送響應。 您正在設置錯誤狀態,但從未發送響應。 而且, throw err
根本沒有用。 沒有什么能抓住它,所以它沒有任何好處。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.