问题描述
我在 Angular 项目中使用 json-server 来模拟 REST API。适用于除 DELETE 之外的所有内容,其中任何和所有包含多个 ID 列的 json 对象都会在发出 DELETE 请求时被删除。
假设我有以下一组具有相关“accountId”ID 列的对象:
"accountfiles": [{
id: 9001,accountId: 1001,filename: 'test.docx',},{
id: 9002,accountId: 1002,filename: 'test.txt',{
id: 9003,filename: 'taxes.pdf',{
id: 9004,accountId: 1003,filename: 'layout.ppt',{
id: 9005,filename: 'Spreadsheet 5.xlsx',}
)];
这些可在以下位置获得:
http://localhost:3000/accountfiles
然后我删除了这个单独的对象:
http://localhost:3000/accountfiles/1001
删除整个集合以及包含多个 ID 列的所有其他集合。
"account": [
{
"id": 1001,"isInactive": false,"name": "HK Asset Group","accountlogoUrl": "/assets/img/logos/logo2.png","location": "Minneapolis MN 55434"
}
]
然后我删除了帐户 ID:1001,整个 accountfiles 集合也被删除了。
我尝试使用 --no-cascade-delete 启动标志但无济于事(似乎不是当前 json-server 构建的一部分)。
在json-server中托管相关数据并有效删除是不可能的吗?
谢谢
解决方法
迟到的答案,但迟到总比不到好。 这个问题仍然是相关的。 我设法通过将所有删除重定向到自定义中间件来绕过这种行为。 坦率地说,处理复杂方面需要一个可以处理与您的逻辑相关的所有合规性的中间件。
var ROUTER = JSON_SERVER.router('./db/db.json');
.
.
.
var paramID = req.params?.id;
var db = router.db;
var ents = db.get('entitieAs').valueOf(); // gets entitieAs collection
db.set('entitieAs',ents.filter(element=>element.id === paramID)).write(); // replace the target collection by the resulting collection after delete
然后在您的 deleteEntities() 方法中获取对您的数据库的引用并相应地管理记录:
Future<List<ProductoModel>> cargarProductos() async {
final url = '$_url/productos.json';
final resp = await http.get(Uri.parse(url));
final Map<String,dynamic> decodeData = json.decode(resp.body);
List produc = [];
if (decodeData == null) return [];
decodeData.forEach((id,prod) {
final prodTemp = ProductoModel.fromJson(prod);
prodTemp.id = id;
produc.add(prodTemp);
//print(produc); <-- if i print here work excelent
});
print(produc); //<-- dont work,dont print nothing
return []; //<-- this line dont work too...
}