云数据存储和Node.js:无法获取实体

我正在使用App Engine灵活的环境和Node.js,并试图在Cloud Datastore中存储和检索实体。

以下代码成功创build一个新的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 ,并做文档告诉我要做的事情 。

任何想法为什么我不能得到我以前创build的实体?

值得注意的是,云数据存储键([Ancestor path +] kind + id / name)不同地处理整数(id)和string(名称)。 也就是说下面的两个键是指不同的实体:

  • 钥匙(事件1234)
  • 钥匙(事件,“1234”)

我不是一个节点专家,但它可能是写和读这些不同的密钥?

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); }); });