Ключ объекта и свойства данных не определены при извлечении из локального хранилища данных

#node.js #google-app-engine #google-cloud-datastore #gcloud

#node.js #google-app-engine #google-облако-хранилище данных #gcloud

Вопрос:

Я пытаюсь следовать документу Googles, вот проблема, с которой я сталкиваюсь. Согласно приведенному здесь документу, когда я извлекаю подобную сущность

 var key = datastore.key(['Company', 'Google']);

datastore.get(key, function(err, entity) {
    // entity.data = The record.
    // entity.key = The key.
});
  

Я должен получить объект сущности со свойствами ключа и данных. Это не то, что я получаю. Вот моя функция чтения

 function read(kind, id, cb) {
    var key = datastore.key([kind, parseInt(id, 10)]);
    datastore.get(key, (err, entity) => {
    if(err) {
        return cb(err);
    }

    if(!entity) {
        return cb({
            code: 404,
            message: 'Not found'
        });
    }
    cb(null, entity.data);
});
}
  

Ни данные, ни ключ не определены. Вместо этого извлеченный объект выглядит следующим образом

 {
  "age": 23,
  "name": "Hello World"
}
  

Что, очевидно, является просто данными. Что я делаю не так? Я работаю над эмулятором хранилища данных gcloud

Вот мои зависимости, если это уместно

 "dependencies": {
    "async": "^2.0.1",
    "body-parser": "^1.15.2",
    "express": "^4.14.0",
    "google-cloud": "^0.43.0",
    "yargs": "^5.0.0"
 }
  

Ответ №1:

Начиная с версии @google-cloud / datastore версии 0,5.0, ключ доступен по символу.

 var datastore = require('@google-cloud/datastore')();

var key = datastore.key(['Company', 'Google']);

datastore.get(key, function(err, entity) {
    var key = entity[datastore.KEY];
});
  

Конечно, вы всегда можете использовать gstore-node (отказ от ответственности: Я владелец этой библиотеки), и тогда вы просто получили бы к ней доступ с помощью entity.EntityKey .

Комментарии:

1. Спасибо, это работает. Но я должен сказать, что я действительно расстроен этим. Они не смогли обновить свои документы?

2. Да, я обнаружил это, потому что он сломал gstore-node и должен был просмотреть их фиксацию.

3. На самом деле они обновили запрос query.run(функция (ошибка, сущности) { var keys = entities.map(функция (сущность) { возвращает объект [хранилище данных. КЛЮЧ]; }); });