Многократный выбор в выдаче запроса к хранилищу данных 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, эти индексы необходимо создавать вручную.

У меня есть учебник, который охватывает это.

Вот шаги:

  1. Установите Java 7 Runtime (или более позднюю версию) http://java.com/
    • Я рекомендую использовать Cloud Shell, в котором уже установлена ​​и настроена Java
  2. Создайте папку с именем WEB-INF
  3. Внутри этой папки вам нужны три файла:
    • appengine-web.xml (замените YOUR_PROJECT_ID_HERE идентификатором вашего проекта)
    • web.xml
    • datastore-indexes.xml (удалить индексы, которые я использовал для моего образца)
  4. В файле datastore-indexes.xml вы должны определить свои индексы с несколькими свойствами. Следуйте документации.
  5. Установите инструмент gcd
  6. Наконец, запустите инструмент gcd (один каталог над папкой WEB-INF)
    • Linux / Mac path/to/gcd.sh updateindexes --auth_mode=oauth2 .
    • Windows path/to/gcd.cmd updateindexes --auth_mode=oauth2 .

Через несколько минут ваши индексы должны быть созданы.

Другие вопросы по тегам