#angularjs #firebase #google-cloud-firestore
#angularjs #firebase #google-cloud-firestore
Вопрос:
я пытаюсь добавить новый документ в предложения коллекции, используя $http.post
метод в angularjs.
я получаю эту ошибку в консоли:
Possibly unhandled rejection: {
"data": {
"error": {
"code": 400,
"message": "Invalid JSON payload received. Unexpected token.nfields[companyNamen^",
"status": "INVALID_ARGUMENT"
}
},
"status": 400,
"config": {
"method": "POST",
"transformRequest": [null],
"transformResponse": [null],
"jsonpCallbackParam": "callback",
"url": "https://firestore.googleapis.com/v1beta1/projects/syrian-sales-v2/databases/(default)/documents/Offers",
"data": "fields[companyName]=qweamp;fields[description]=qweamp;fields[expiredDate]=qweamp;fields[title]=qweamp;fields[userId]=rsVWKar7UTMwUmcyYJbr6Rif4NN2",
"headers": {
"Content-Type": "application/json; charset=UTF-8;",
"Accept": "application/json, text/plain, /"
}
},
"statusText": "",
"xhrStatus": "complete"
}
я перепробовал так много решений, но ни одно из них не сработало.
вот код контроллера:
app.controller('insert_controller', function ($scope, $http, $httpParamSerializerJQLike) {
let userId = "rsVWKar7UTMwUmcyYJbr6Rif4NN2";
let url = "https://firestore.googleapis.com/v1beta1/projects/syrian-sales-v2/databases/(default)/documents/Offers";
$scope.insertOffer = function () {
let companyName = $scope.companyName;
let title = $scope.title;
let expiredDate = $scope.expiredDate;
let description = $scope.description;
let data = {
"fields": {
"companyName": companyName,
"title": title,
"expiredDate": expiredDate,
"description": description,
"userId": userId,
}
};
$http({
method: 'POST',
url: url,
data: $httpParamSerializerJQLike(data),
headers: {
'Content-Type': 'application/json; charset=UTF-8;'
}
}).then(function (res) {
if (res.data){
$scope.companyName = null;
$scope.title = null;
$scope.expiredDate = null;
$scope.description = null;
alert('Offer Added Successfully')
}
}).catch(function (err) {
console.log(err);
throw err
});
}
});
любая помощь была бы отличной, заранее спасибо
РЕДАКТИРОВАТЬ: я попытался отправить post-запрос от postman, и он работал с тем же URL-адресом и той же структурой данных json, которую я использую
Комментарии:
1. Похоже, что отправляемая вами полезная нагрузка не очень хорошо сформирована, я протестировал ее на Json lint, и поле CompanyName также вызвало ошибку, проверьте, как создать документ здесь: cloud.google.com/firestore/docs/reference/rest/v1beta1 /…
2. @HarifVelarde спасибо, но я уже решил проблему.
3. не могли бы вы поделиться в качестве ответа, как вы решаете эту проблему? Это будет полезно для других пользователей с аналогичным сценарием
4. @HarifVelarde да, конечно, на самом деле это не решение, это опечатка, я использовал неправильную структуру данных, я должен был добавить атрибут stringValue к каждому полю, так что на самом деле это ничего
5. Я имел в виду опубликовать его в качестве ответа, чтобы другие могли считать его решенным и воспользоваться ответом
Ответ №1:
проблема заключалась в том, что я использовал неправильную схему.
Это старая схема:
let data = {
"fields": {
"companyName": companyName,
"title": title,
"expiredDate": expiredDate,
"description": description,
"userId": userId,
}
};
Это правильная схема, которая работала:
let data = {
"fields": {
"companyName": {
"stringValue": companyName
},
"title": {
"stringValue": title
},
"expiredDate": {
"stringValue": expiredDate
},
"description": {
"stringValue": description
},
"userId": {
"stringValue": userId
},
}
};