我正在将 App Engine 灵活环境与 Node.js 结合使用,并尝试在 Cloud Datastore 中存储和检索实体。
以下代码成功创建了一个新的Event
实体:
/* Create event */
router.post('/', function(req, res, next) {
const eventKey = datastore.key('Event');
datastore.save({
key: eventKey,
data: req.body
})
.then(() => {
console.log('New event created');
res.json({id: eventKey.id});
})
.catch((err) => { next(err); });
});
但是,当我提供之前返回的 id
时,以下内容会返回一个空数组:
/* Get an event */
router.get('/:id', function(req, res, next) {
console.log(req.params.id);
var eventKey = datastore.key(['Event', req.params.id]);
datastore.get(eventKey)
.then((event) => {
console.log(event);
res.json(event);
})
.catch((err) => { console.log(err); next(err); });
});
我似乎正确使用了 datastore.get
并执行 what the docs is telling me to do .
知道为什么我无法获取之前创建的实体吗?
最佳答案
值得注意的是,Cloud Datastore 键([祖先路径 +] kind + id/name)以不同方式对待整数 (id) 和字符串 (name)。也就是说,以下2个键引用不同的实体:
- 键(事件,1234)
- 键(事件,“1234”)
我不是 Node 专家,但有可能它正在写入和读取这些不同的 key 吗?
parseInt 可以解决这个问题:
/* Get an event */
router.get('/:id', function(req, res, next) {
console.log(req.params.id);
var eventId = parseInt(req.params.id, 10)
var eventKey = datastore.key(['Event', eventId]);
datastore.get(eventKey)
.then((event) => {
console.log(event);
res.json(event);
})
.catch((err) => { console.log(err); next(err); });
});
关于node.js - 云数据存储和 Node.js : Cannot get entity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44973337/