首页 > 解决方案 > 处理 Flutter 应用程序的 POST 方法时出错

问题描述

我目前正在为个人资料页面做一个应用程序,我构建了一个简单的表单来更新用户的姓名和性别。当我点击保存时,flutter 不显示任何错误,但服务器端返回错误。

后端运行在 Node.js 和 MYSQL 作为数据库

这是我的 Flutter 的 HTTP POST 方法


Future<bool> updateProfile(String name, String gender) async {
    _isLoading = true;
    notifyListeners();
    final Map<String, dynamic> profileData = {

      'name': name,
      'gender': gender
    };
    try {
      print( json.encode(profileData));
      final http.Response response = await http.post(
          'http://10.0.2.2:3030/profile/updateprofile',
          headers: {"Accept": "application/json",},
          body: profileData);

      if (response.statusCode != 200 && response.statusCode != 201) {
        _isLoading = false;
        notifyListeners();
        return false;
      }
      final Map<String, dynamic> responseData = json.decode(response.body);
      print(responseData);
      final Profile newProfile = Profile(
          profileId: responseData['profileId'], 
          name: name, 
          gender: gender);
      _profile.add(newProfile);
      _isLoading = false;
      notifyListeners();
      return true;
    } catch (error) {
      _isLoading = false;
      notifyListeners();
      return false;
    }
  }

这是更新配置文件表单的代码

void _submitForm(Function updateProfile) {
    if (!_formKey.currentState.validate()) {
      return;
    }
    _formKey.currentState.save();
    updateProfile(
      _titleTextController.text,
      _formData['gender'],
    ).then((_) => Navigator.pushReplacementNamed(context, '/myprofile'));
  }

这是在服务器端(NodeJS)返回的错误

 body: {},
  route:
   Route {
     path: '/updateprofile',
     stack: [ [Layer] ],
     methods: { post: true } } }
{ SequelizeValidationError: notNull Violation: profile.name cannot be null
    at Promise.all.then (D:\HTDOCS\MDFOLIO\PinkBook\back-end\node_modules\sequelize\lib\instance-validator.js:74:15)
    at tryCatcher (D:\HTDOCS\MDFOLIO\PinkBook\back-end\node_modules\bluebird\js\release\util.js:16:23)
    at Promise._settlePromiseFromHandler (D:\HTDOCS\MDFOLIO\PinkBook\back-end\node_modules\bluebird\js\release\promise.js:512:31)
    at Promise._settlePromise (D:\HTDOCS\MDFOLIO\PinkBook\back-end\node_modules\bluebird\js\release\promise.js:569:18)
    at Promise._settlePromise0 (D:\HTDOCS\MDFOLIO\PinkBook\back-end\node_modules\bluebird\js\release\promise.js:614:10)
    at Promise._settlePromises (D:\HTDOCS\MDFOLIO\PinkBook\back-end\node_modules\bluebird\js\release\promise.js:694:18)
    at Promise._fulfill (D:\HTDOCS\MDFOLIO\PinkBook\back-end\node_modules\bluebird\js\release\promise.js:638:18)
    at PromiseArray._resolve (D:\HTDOCS\MDFOLIO\PinkBook\back-end\node_modules\bluebird\js\release\promise_array.js:126:19)
    at PromiseArray._promiseFulfilled (D:\HTDOCS\MDFOLIO\PinkBook\back-end\node_modules\bluebird\js\release\promise_array.js:144:14)
    at Promise._settlePromise (D:\HTDOCS\MDFOLIO\PinkBook\back-end\node_modules\bluebird\js\release\promise.js:574:26)
    at Promise._settlePromise0 (D:\HTDOCS\MDFOLIO\PinkBook\back-end\node_modules\bluebird\js\release\promise.js:614:10)
    at Promise._settlePromises (D:\HTDOCS\MDFOLIO\PinkBook\back-end\node_modules\bluebird\js\release\promise.js:694:18)
    at _drainQueueStep (D:\HTDOCS\MDFOLIO\PinkBook\back-end\node_modules\bluebird\js\release\async.js:138:12)
    at _drainQueue (D:\HTDOCS\MDFOLIO\PinkBook\back-end\node_modules\bluebird\js\release\async.js:131:9)
    at Async._drainQueues (D:\HTDOCS\MDFOLIO\PinkBook\back-end\node_modules\bluebird\js\release\async.js:147:5)
    at Immediate.Async.drainQueues [as _onImmediate] (D:\HTDOCS\MDFOLIO\PinkBook\back-end\node_modules\bluebird\js\release\async.js:17:14)
    at runCallback (timers.js:696:18)
    at tryOnImmediate (timers.js:667:5)
    at processImmediate (timers.js:649:5)
  name: 'SequelizeValidationError',

标签: mysqlnode.jsflutter

解决方案


推荐阅读