ApiError:禁止从本地Node.js app

时间:2016-01-14 16:41:05

标签: node.js google-app-engine gcloud-node

我有一个部署到App Engine的应用程序,并希望从我在本地运行的Node.js应用程序访问该应用程序的数据存储区。我从Hello World app for Node开始尝试从部署的应用程序的数据存储中检索实体,并在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之后(在“从另一个平台访问现有App Engine数据存储区”标题下)在我的App Engine应用中设置了一个服务帐户,并生成了我在Node项目中的JSON密钥文件根目录(与app.js相同的目录)。尝试从数据存储区获取有效实体时,我记录错误“ApiError:Forbidden”。我只能推测App Engine项目未正确配置服务帐户或未正确启用Cloud Datastore API,因此有什么我显然做错了,或者我可以获得有关返回错误的更多详细信息?

2 个答案:

答案 0 :(得分:1)

我在几个小时的持续时间内(2016年1月15日期间)遇到了同样的问题。然后Node.js代码再次开始工作而不改变任何东西,我现在能够访问数据存储区API。显然,这是Google云服务中的一个临时问题。

答案 1 :(得分:1)

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