ApiError: Forbidden accessing App Engine datastore from local Node.js app

ApiError: Forbidden accessing App Engine datastore from local Node.js app

我有一个部署到 App Engine 的应用程序,我想从我在本地 运行 的 Node.js 应用程序访问该应用程序的数据存储区。我从 Hello World app for Node and am trying to retrieve an entity from my deployed app's datastore and log it to the console following this documentation 开始。我的 Node 应用程序代码如下。

var express = require('express');
var gcloud = require('gcloud')({
  projectId: 'myProjectId',
  keyFilename: __dirname + 'myKeyfile.json'
});
var datastore = gcloud.datastore;
var dataset = datastore.dataset();

var app = express();

app.get('/', function(req, res) {
  dataset.get(dataset.key(['Practice', 4392384]), function(err, entity) {
    if (err) {
      console.log("ERROR: " + err);
    } else {
      console.log("Practice entity: " + entity);
    }
  });
  res.status(200).send('Hello, world!');
});    

var server = app.listen(process.env.PORT || 8081, function () {
  var host = server.address().address;
  var port = server.address().port;

  console.log('App listening at http://%s:%s', host, port);
});

我已经在 these directions 之后(在 "Accessing an existing App Engine Datastore from another platform" header 下)在我的 App Engine 应用程序中设置了一个服务帐户,并生成了一个我拥有的 JSON 密钥文件在我的 Node 项目的根目录中(与 app.js 相同的目录)。尝试从数据存储中获取有效实体时,我记录了 "ApiError: Forbidden" 错误。我只能推测 App Engine 项目没有正确配置服务帐户或 Cloud Datastore API 没有正确启用,所以我明显做错了什么,或者我可以通过任何方式获得更多详细信息返回错误?

我在几个小时内(2016 年 1 月 15 日)遇到了同样的问题。然后 Node.js 代码在不做任何更改的情况下再次开始工作,我现在可以访问数据存储区 API。显然这是 Google 的云服务中的一个临时问题。

我从 Google 的技术支持那里得到了关于这个问题的帮助。事实证明,我正在尝试实现一个示例,该示例不适用于连接到已部署 App Engine 应用程序的本地 Node 应用程序。我尝试使用的服务帐户是用于将 Node.js 的 client-side 连接到应用程序的后端,而不是从另一个应用程序访问一个应用程序(这就是我正在做的)。为了达到我的目的,他建议遵循 these instructions.