node.js - 云数据存储和 Node.js : Cannot get entity

标签 node.js express google-cloud-datastore google-cloud-platform

我正在将 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/

相关文章:

GWT RPC 和持久 Java 对象

java - Google App Engine(Java) 数据库自动生成的 ID

node.js - 当我尝试发送电子邮件时,ESOCKET 错误是什么意思?

javascript - GraphQL:在同一查询中使用输入类型及其字段之一

Node.js 和 Backbone.marionette 初始 View

html - 在 Node.js 中加载基本 HTML

reactjs - 在云服务上使用 nestjs 服务器部署 React 应用程序以获得更好的 SEO

node.js - Express.js 中的自定义错误处理

javascript - 如何在 javascript 中获取静态公共(public)文件夹中的文件列表?

google-app-engine - 如何将键的字符串版本转换回我可以使用 get() 函数获取实体实例的形式