基于Express的json-server中,如何通过单个POST发起多个DELETE请求?
解决json-server批量删除favorites时redirect仅执行一次的问题
问题原因
你当前的代码里,res.redirect()会立即向客户端发送HTTP响应,而每个HTTP请求只能对应一个响应。所以循环里第一次调用res.redirect()后,整个请求就直接结束了,后续的循环迭代根本没机会执行,自然只能删除第一个ID对应的资源。
解决方案:直接操作json-server的数据库实例
json-server基于lowdb(轻量级JSON数据库),我们可以直接操作它的数据库实例来批量删除,这比多次发起DELETE请求高效得多,也能彻底避开redirect的限制。
修改你的自定义路由handler如下:
'/deletefavorites': { method: 'POST', handler: function(req, res, next) { // 1. 获取json-server的数据库实例 const db = req.app.db; // 2. 提取要删除的favorites ID数组 // 注意:请确保前端传入的req.body是合法JSON,比如 [{id:"123"}, {id:"124"}] 或 ["123", "124"] const idsToDelete = req.body.map(item => item.id || item); // 3. 批量删除favorites集合中匹配ID的项 db.get('favorites') .remove({ id: idsToDelete }) // lowdb支持传入数组批量匹配ID .write(); // 4. 向客户端返回成功响应 res.status(200).json({ success: true, message: `成功删除${idsToDelete.length}条收藏`, deletedIds: idsToDelete }); } }
额外提醒
如果你的req.body是{[ "id": "123", "id":"124" ]}这种无效格式,需要先修正前端的请求数据,改成合法的JSON数组,否则req.body.map会直接报错。
内容的提问来源于stack exchange,提问作者Frederik Witte
相关产品推荐
相关产品推荐

