API 错误:禁止从本地 Node.js 应用程序访问 App Engine 数据存储



我有一个应用程序部署到 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 项目的根目录(与 app.js 相同的目录)中。 尝试从数据存储获取有效实体时,我记录错误为"ApiError:禁止访问"。 我只能推测 App Engine 项目未正确配置服务帐户或未正确启用云数据存储 API,那么我是否明显做错了什么,或者有什么方法可以获取有关返回错误的更多详细信息?

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

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

相关内容

  • 没有找到相关文章

最新更新