Node BigQuery 包——Ubuntu 上的 ENOENT 错误

Posted

技术标签:

【中文标题】Node BigQuery 包——Ubuntu 上的 ENOENT 错误【英文标题】:Node BigQuery package -- ENOENT error on Ubuntu 【发布时间】:2014-05-04 06:27:49 【问题描述】:

我正在尝试使用此处找到的 BigQuery 包: https://www.npmjs.org/package/bigquery

设置:Ubuntu 14、最新的 Node、nginx,以及 bigquery 包及其依赖项。

我相信我已经正确设置了它,包括 PEM 文件,但是当我尝试加载密钥文件时,我收到了来自 gauth 的错误:

[2014-05-04 02:14:57.008] [ERROR] gauth -  [Error: ENOENT, open './key.mydomain.com.p12.pem']
  errno: 34,
  code: 'ENOENT',
  path: './key.mydomain.com.p12.pem' 
Error: ENOENT, open './key.mydomain.com.p12.pem'

我正在运行一个简单的测试脚本,看起来像这样(我已经 Xxxx 删除了我的项目 ID):

var http = require('http')
  , bq = require('bigquery')
  , fs = require('fs')
  , prjId = 'xxxxxxxxxx'; //you need to modify this

bq.init(
    scope: 'https://www.googleapis.com/auth/bigquery',
    client_secret: './client_secrets.json',
    privatekey_pem: './private.mydomain.com.p12.pem',
    key_pem: './key.mydomain.com.p12.pem'
  );


http.createServer(function (req, res) 
    res.writeHead(200, 'Content-Type': 'text/plain');
    res.write('Testing BigQuery... \n');

    bq.job.query(prjId, 'select count(*) from publicdata:samples.wikipedia', function(e,r,d)
      if(e) console.log(e);
      console.log( JSON.stringify(d) );
    );

    res.end('Done. \n');
).listen(3000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');

我尝试过引用不同的文件,使用 __dirname 并且也没有斜杠。

有什么想法吗?我也在查看依赖项中的 Google 代码,但只是没有弄清楚这一点。

【问题讨论】:

【参考方案1】:

34 错误意味着“没有这样的文件或目录”。您确定文件 key.mydomain.com.p12.pem 与您的索引文件存在于同一目录中吗?

【讨论】:

是的。它与 app.js 位于同一目录中。为了帮助验证,我将文件名更改为其他名称以“破坏”它......在这种情况下,我在启动节点服务器时立即收到 ENOENT 错误。由于我上面的示例有一个运行得很好的 Node 服务器,并且我只在使用包的包装器为 Google Auth 库时才得到 ENOENT,我认为还有其他问题......【参考方案2】:

啊,想通了:我用来生成私钥和公钥的 P12 文件与我的 client_secrets 不匹配。

因此,如果其他人遇到此问题,ENOENT 可能是由于有一个 client_secrets.json 和一组未一起创建的服务帐户的密钥。

【讨论】:

以上是关于Node BigQuery 包——Ubuntu 上的 ENOENT 错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Ubuntu 上安装 Node.js

TODO:Ubuntu下安装Node

如何在Ubuntu14.04服务器上安装NodeJS

如何在ubuntu 安装nodejs

从 node.js 获取 bigquery 结果到浏览器

无法在 node.js 上安装任何加密包