因此,我使用 NeDB 創建了一個 REST API,并且我的 POST 和 GET 請求可以正常作業,但是我無法讓 DELETE 請求正常作業。我一直在控制臺中收到“洗掉 http://localhost:3000/api 400(錯誤請求)”錯誤。
這是我的服務器檔案中的洗掉部分:
app.delete('/api', (request, response) => {
database.remove({ _id: request }, {}, function(err, numRemoved) {});
});
這是執行 DELETE 的按鈕:
document.body.addEventListener('click', function(event) {
if (event.target.id == uid) {
const options = {
method: 'DELETE',
headers: {
'Content-Type': 'application/json'
},
body: uid
};
fetch('/api', options);
};
});
它說錯誤的請求來自fetch('/api', options); ,但我不知道如何解決它!誰能幫我?
uj5u.com熱心網友回復:
我看不到在哪里uid設定。但是,根據您的錯誤訊息,我認為這uid不是有效的 JSON 物件。您可以uid放入像{ uid }. 然后,使用 讀取路由處理程式中的物件request.body.uid。
此外,在傳統的 REST API 中,DELETE 請求沒有正文。相反,您的路線將采用/api/:id. 然后您的請求 url 需要更新為"/api/" uid. 然后,您可以使用 讀取路由處理程式中的請求引數req.params.id。
uj5u.com熱心網友回復:
錯誤可能是由于洗掉請求不應接收 json 正文,您應該將 uid 作為路徑變數傳遞,例如:
app.delete('/api/:uid', (request, response) => {
const uid = request.params.uid;
database.remove({ _id: uid }, {}, function(err, numRemoved) {});
});
并將您的電話更改為:
document.body.addEventListener('click', function(event) {
if (event.target.id == uid) {
const options = {
method: 'DELETE',
};
const endpoint = `/api/${uid}`;
fetch(endpoint, options);
};
});
uj5u.com熱心網友回復:
我覺得這可能源于對DELETE請求是什么的誤解。
該DELETE方法的主要目標是洗掉 uri 處的資源。例如, a DELETEon/article/123洗掉 處的資源/article/123,這意味著GET該位置的未來請求應導致 a404或410。
在DELETE請求中包含正文是沒有意義的,因為如果請求的目的是洗掉 URI 處的資源,那么正文中的任何內容都不會真正進一步修改請求的含義。HTTP 規定DELETE(和GET其他人)不應該有正文。
所以你提出的請求是DELETE /api,這意味著“洗掉 /api 資源”。身體無關緊要(并導致您的錯誤)。
看起來您想要更多的 RPC 風格的 API。如果你只使用一個/api端點,你可能應該忘記所有的方法而只使用POST. 你并不是真的在做 REST。
如果您確實想應用更多設計并使用適當的 HTTP 方法,您應該首先考慮路由的結構。請記住,該方法描述了您正在執行的操作型別,而 URI 描述了您正在執行該操作的內容。設計 API 以通過單個端點(例如使用 GraphQL 和 SOAP)的人有效地使用 HTTP 作為他們自己協議的“隧道”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/340829.html
標籤:javascript 休息 表达 http-删除 数据库
下一篇:更改滾動方向中頁,然后回傳
