2

我有一个应用程序部署到 App Engine,并且想从我在本地运行的 Node.js 应用程序访问该应用程序的数据存储区。我从Node 的 Hello World 应用程序开始,并尝试从我部署的应用程序的数据存储区中检索一个实体,并按照本文档将其记录到控制台。我的 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);
});

我已经按照这些说明(在“从另一个平台访问现有的 App Engine 数据存储”标题下)在我的 App Engine 应用程序中设置了一个服务帐户,并生成了一个 JSON 密钥文件,该文件位于我的 Node 项目的根目录(与应用程序.js)。尝试从数据存储中获取有效实体时,我记录了“ApiError:Forbidden”错误。我只能推测 App Engine 项目没有正确配置服务帐户或 Cloud Datastore API 没有正确启用,所以我显然做错了什么,或者我可以通过任何方式获得有关返回的错误的更多详细信息?

4

2 回答 2

1

在此问题上,我从 Google 技术支持部门获得了帮助。事实证明,我正在尝试实现一个示例,该示例不适用于连接到已部署 App Engine 应用的本地 Node 应用。我尝试使用的服务帐户用于将 Node.js 的客户端连接到应用程序的后端,但不从另一个应用程序访问一个应用程序(这就是我正在做的)。为了做我想做的事,他建议遵循这些说明。

于 2016-01-21T13:14:21.317 回答
1

我在几个小时内(2016 年 1 月 15 日)遇到了同样的问题。然后 Node.js 代码再次开始工作而无需更改任何内容,我现在可以访问 Datastore API。显然这是谷歌云服务中的一个临时问题。

于 2016-01-15T02:59:01.453 回答