Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 如何更新firestore中嵌套文档中的嵌套文档?_Firebase_Flutter_Dart_Google Cloud Firestore_Google Cloud Functions - Fatal编程技术网

Firebase 如何更新firestore中嵌套文档中的嵌套文档?

Firebase 如何更新firestore中嵌套文档中的嵌套文档?,firebase,flutter,dart,google-cloud-firestore,google-cloud-functions,Firebase,Flutter,Dart,Google Cloud Firestore,Google Cloud Functions,这是我的功能 exports.updateUserSettings = functions.https.onRequest((request, response) => { cors(request, response, () => { setResponseHeaders(response); console.log('input', request.body); const name = request.body.name; const set

这是我的功能

exports.updateUserSettings = functions.https.onRequest((request, response) => {
  cors(request, response, () => {
    setResponseHeaders(response);
    console.log('input', request.body);
    const name = request.body.name;
    const settings = request.body.settings;

     return db
      .collection(COLLECTION_USERS)
      .doc(name)
      .update(settings)
      .then(() => {
        return response.status(200).json({
          success: true,
          data: null
        });
      })
      .catch(error => {
        return response.status(200).json({
          success: false,
          error: error,
          data: null
        });
      });
  });
});
这是我的firestore文档

我想更新我的设置对象。这是我的请求

 { name: 'frank6',
   settings: '{"autoPass":true,
   "autoRoll":true,
   "colors": {
     "check":"#000000", 
     "dark":"#b58863", 
     "light":"#f0d9b5", 
     "mate":"#ff4500", 
     "selected":"#90ee90", 
     "source":"#90ee90", 
     "target":"#228b22"
    }, 
   "language":"en",
   "showCheckMoves":true,
   "showFileRank":true,
   "showLastOpponentMove":true,
   "showMateMoves":true,
   "showMoves":true,
   "sounds":true,
   "view":"2D"
   }' 
 }
它有一个错误:参数数据的值不是有效的Firestore文档。输入不是普通的JavaScript对象。我知道如何根据更新嵌套文档,但我不确定为什么会发生此错误。也许我需要格式化我的请求正文,但我现在知道如何

我也有我的颤振飞镖网络应用程序的请求

Future<void> updateUserSettings(ChexiUser user) async {
  await http.post(CLOUD_FUNCTIONS_BASE_URL + '/updateUserSettings', body: {
    'name': user.name,
    'settings': convert.jsonEncode(user.toSettingsFirebaseDocument())
  });
}
下面是我的toSettingsFirebaseDocument函数

Map<String, dynamic> toSettingsFirebaseDocument() {
  return {
    'autoPass': settingsAutoPass,
    'autoRoll': settingsAutoRoll,
    'colors': {
      'check': settingsColorsCheck,
      'dark': settingsColorsDark,
      'light': settingsColorsLight,
      'mate': settingsColorsMate,
      'selected': settingsColorsSelected,
      'source': settingsColorsSource,
      'target': settingsColorsTarget
    },
    'language': settingsLanguage,
    'showCheckMoves': settingsShowCheckMoves,
    'showFileRank': settingsShowFileRank,
    'showLastOpponentMove': settingsShowLastOpponentMove,
    'showMateMoves': settingsShowMateMoves,
    'showMoves': settingsShowMoves,
    'sounds': settingsSounds,
    'view': settingsView
  };
  }
 }

好吧,结果证明这只是一个简单的错误。我只需要用JSON.parse包装我的request.body

const settings = JSON.parse(request.body.settings);

而且工作正常。我不打算删除这个问题,也许它会对遇到类似问题的其他人有用。

好吧,结果证明这只是一个简单的错误。我只需要用JSON.parse包装我的request.body

const settings = JSON.parse(request.body.settings);
而且工作正常。我不打算删除这个问题,也许它会对遇到类似问题的其他人有用