Вот моя функция
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
});
});
});
});
А вот мой документ пожарного магазина
Я хочу обновить свой объект настроек. А вот мое тело запроса
{ 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 объектом. Я знаю, как обновить вложенные документы на основе https://firebase.google.com/docs/firestore/manage-data/add-data#update_fields_in_nested_objects, но я не уверен, почему возникает эта ошибка, может быть, мне нужно отформатировать тело запроса, но теперь я уверен, как.
У меня также есть запрос от моего веб-приложения «Дрожание флаттера»
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
};
}
}