执行 CRUD 操作时出现问题

问题描述 投票:0回答:1

我的应用程序使用 Android 模拟器设备以及运行支持的节点的端口连接到 node.js

final serverUrl = 'http://10.0.2.2:3000';

我已经在我的应用程序中实现了 CRUD。 每次我尝试更新和删除应用程序中的项目时,都会引发代码中处理的异常。此外,该项目不会被删除或更新。

Future<List<Item>> fetchItems() async {
    final response = await http.get(Uri.parse('$serverUrl/api/v1/items'));

    if (response.statusCode == 200) {
      final List<dynamic> itemList = jsonDecode(response.body);
      final List<Item> items =
          itemList.map((json) => Item.fromJson(json)).toList();
      return items;
    } else {
      throw Exception('Failed to fetch items');
    }
  }

  Future<Item> addItem(String name) async {
    final response = await http.post(Uri.parse('$serverUrl/api/v1/items'),
        headers: {'content-type': 'application/json'},
        body: jsonEncode({'name': name}));
   if (response.statusCode == 200) {
    final dynamic json = jsonDecode(response.body);
    final Item item = Item.fromJson(json);
    return item;
   }else{
    throw Exception('Failed to fetch item');
   }
  }

  Future<void> updateItem(int id, String name) async {
    final response = await http.delete(
      Uri.parse('$serverUrl/api/v1/items/$id'),
      headers: {'Content-Type': 'application/json'},
      body: jsonEncode({"name": name}),
    );
    if (response.statusCode != 200) {
      throw Exception('Failed to update item');
    }
  }

  Future<void> deleteItem(int id) async {
    final response = await http.delete(Uri.parse('$serverUrl/api/v1/items/$id'));
    if (response.statusCode != 200) {
      throw Exception('Failed to delete item');
    }
  }

触发更新和删除的代码

IconButton(
                            icon: const Icon(Icons.edit),
                            onPressed: () {
                              dialog('Edit item', 'Edit', onPressed: () {
                                updateItem(item.id, nameController.text);
                                Navigator.pop(context);
                              });
                            },
                          ),



floatingActionButton: FloatingActionButton(
        onPressed: () {
          dialog('Add item', 'Item name', onPressed: () {
            addItem(nameController.text);
            Navigator.pop(context);
          });
        },
        tooltip: 'Add button',
        child: const Icon(Icons.add),
      )

 

下面是更新和删除的后端代码

const express = require('express');
  const app = express();
  const port = process.env.port || 3000;

onst itemList = [
    {id: 1, name: 'name here'},
];

app.put('/api/v1/items/:id', (req, res) => {
  let itemId = req.params.id;
  let updatedItem = {
    id: itemId,
    name: req.body.name
  }
  const index = itemList.findIndex(item => item.id === itemId);
  if(index !== -1){
    itemList[index] = updatedItem
    res.json(updatedItem);
  }else{
    res.status(404).json({message: 'Item not found'})
  }


})
app.delete('/api/v1/items/:id', (req, res) => {
    let itemId = req.params.id;
    let index = itemList.findIndex(item => item.id === itemId);
    if(index!== -1){
     let deletedItem = itemList.splice(index, 1);
      res.json(deletedItem[0])
    }else{
      res.status(404).json({message: 'Item not found'})
    }
 
})
node.js flutter dart
1个回答
0
投票

我第一眼看到的唯一错误是你在

http.delete
函数中使用了
updateItem
,我想这就是更新不起作用的原因(但它仍然应该删除该项目)。

错误发生在哪里?应用程序是否实际到达服务器(添加一些

console.log
或断点来检查这一点),服务器是否获得正确的参数并执行正确的操作?它是否返回预期的状态代码?然后回到 Flutter 应用程序中,您能看到相同的代码(再次使用断点或打印语句)吗?

我希望这可以帮助您找到问题所在,并使问题变得不那么广泛。

© www.soinside.com 2019 - 2024. All rights reserved.