无法使用google-cloud node.js客户端插入BigQuery

pak*_*ldt 2 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));
});
Run Code Online (Sandbox Code Playgroud)

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

{}
undefined
Run Code Online (Sandbox Code Playgroud)

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

null
{"kind":"bigquery#tableDataInsertAllResponse"}
Run Code Online (Sandbox Code Playgroud)

并且记录已成功存储。

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

有人会知道我的环境是什么导致这种情况发生的吗?

pak*_*ldt 5

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

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

问题解决了。