未能使用google-cloud node.js客户端

时间:2018-01-23 10:38:51

标签: node.js google-bigquery google-cloud-platform

我有一个与BigQuery节点一起运行的Node-RED安装,它突然停止工作。已经能够将其缩小到一个非常小的例子,我再也无法继续工作了:

代码如下所示:

// Imports the Google Cloud client library
const BigQuery = require('@google-cloud/bigquery');

// Your Google Cloud Platform project ID
const projectId = 'my-project';
const file = './google-cloud-auth.json'

// Creates a client
const bigquery = new BigQuery({
  projectId: projectId,
  keyFilename: file
});

const datainsert = {
    "water_total": 555,
    "power_vp": 3460651,
    "power_ftx": 4401819,
    "time": "2018-01-23T09:50:17.672Z",
    "power_total": 5737457,
    "power_garage_radiator_south": 182521,
    "power_garage_radiator_north": 76388
};
// The name for the new dataset
const dataset = bigquery.dataset('consumption');
const table = dataset.table('consumption_test');
table.insert(datainsert, function(err, response) {
    console.log(JSON.stringify(err));
    console.log(JSON.stringify(response));
});

当我在我的Ubuntu机器上运行它(NodeJS v4.8.7)时,它输出:

{}
undefined

没有任何东西写入BQ。 但是,当我在Mac(NodeJS v6.9.4)上运行完全相同的代码(实际上我试图复制整个文件夹结构)时,它会输出:

null
{"kind":"bigquery#tableDataInsertAllResponse"}

并且记录成功存储。

显然我认为它与Node版本有关,所以我尝试在它用来运行的Docker容器中运行它但是使用NodeJS v6.9.4但是它仍然无法在该机器上成功运行。我正在使用相同的身份验证文件运行,因此我认为它与此无关。

有人会碰巧知道我的环境中导致这种情况发生的原因吗?

1 个答案:

答案 0 :(得分:4)

经过几个小时的刮擦后,我终于发现问题是机器上的时钟稍微不同步(5分钟)。当我决定运行其他命令以查看它们是否有效时,我意识到了这一点。在尝试获取数据集列表时,我得到了以下(非常有用)错误:

  

[错误:invalid_grant:无效的JWT:令牌必须是短期令牌   (60分钟)并在合理的时间范围内。检查你的iat和exp   值并使用具有偏斜的时钟来计算时钟差异   系统之间。]

问题解决了。