Многократный выбор в выдаче запроса к хранилищу данных Google ApiError: ошибка предварительного условия в узле
Я использую следующий запрос для извлечения некоторых объектов из хранилища данных Google:
var query = datastore.createQuery(namespace,tableName);
query.select(['displayName','username']);
datastore.getEntitySet(query,function(err,data){
if(err){
res.status(500).end();
}
else{
res.send(data);
}
});
Приведенный выше код работает нормально, если я выбираю только одно свойство, т.е.
query.select('username');
Но при множественном выборе выбрасывает ошибку 412 "Precondition Failed". моя сущность выглядит следующим образом: свойства сущности
1 ответ
Решение
Вам нужно создать индекс с несколькими свойствами, чтобы использовать запросы с несколькими свойствами.
Поскольку вы не используете App Engine, эти индексы необходимо создавать вручную.
У меня есть учебник, который охватывает это.
Вот шаги:
- Установите Java 7 Runtime (или более позднюю версию) http://java.com/
- Я рекомендую использовать Cloud Shell, в котором уже установлена и настроена Java
- Создайте папку с именем WEB-INF
- Внутри этой папки вам нужны три файла:
- appengine-web.xml (замените YOUR_PROJECT_ID_HERE идентификатором вашего проекта)
- web.xml
- datastore-indexes.xml (удалить индексы, которые я использовал для моего образца)
- В файле datastore-indexes.xml вы должны определить свои индексы с несколькими свойствами. Следуйте документации.
- Установите инструмент gcd
- Наконец, запустите инструмент gcd (один каталог над папкой WEB-INF)
- Linux / Mac
path/to/gcd.sh updateindexes --auth_mode=oauth2 .
- Windows
path/to/gcd.cmd updateindexes --auth_mode=oauth2 .
- Linux / Mac
Через несколько минут ваши индексы должны быть созданы.