#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(функция (сущность) { возвращает объект [хранилище данных. КЛЮЧ]; }); });