我有一个与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但是它仍然无法在该机器上成功运行。我正在使用相同的身份验证文件运行,因此我认为它与此无关。
有人会碰巧知道我的环境中导致这种情况发生的原因吗?
答案 0 :(得分:4)
经过几个小时的刮擦后,我终于发现问题是机器上的时钟稍微不同步(5分钟)。当我决定运行其他命令以查看它们是否有效时,我意识到了这一点。在尝试获取数据集列表时,我得到了以下(非常有用)错误:
[错误:invalid_grant:无效的JWT:令牌必须是短期令牌 (60分钟)并在合理的时间范围内。检查你的iat和exp 值并使用具有偏斜的时钟来计算时钟差异 系统之间。]
问题解决了。