mysql - 处理 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',
解决方案
推荐阅读
- python - 检查列并乘以其他不同的长度
- redis - 如何知道有多少客户端连接到redis流
- java - InvalidModuleDescriptorException 导致启动层初始化时出错
- flutter - 颤振:广告未能加载:1
- z3 - Z3 如何检查模型是否满足新的断言/约束
- python - 给定一个名称列表,输出一个列表,其中仅包含包含超过 5 个字符的名称
- lightbox2 - .SVG - 文件未在 IE 中显示
- pyspark - 如何使用 UDF 在 PySpark 中合并多边形
- javascript - Cropper.js 固定图像宽度高度
- ios - 如何在不访问其开发者帐户的情况下更新客户的 iOS 应用程序?