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

时间:2016-08-21 18:12:18

标签: javascript node.js google-bigquery google-compute-engine

我正在使用node.js 运行Google计算引擎,但正在使用codeanywhere进行测试。我能够在codeanywhere终端上运行一个bigquery请求,并获得要在终端控制台上显示的结果。

但是当我尝试从html页面执行相同操作时,我无法将结果返回到用户/浏览器。

我在codeanywhere上安装的唯一节点模块是firebase和googleapis。

我希望在服务器端运行bigquery调用,因为我想隐藏身份验证信息;否则只会从javascript运行bigquery api。

我的test.js是:

'use strict';

var google = require('XXX/lib/googleapis');
var bigquery = google.bigquery('v2');
var authClient = new google.auth.JWT(
    'XXX@XXX.iam.gserviceaccount.com',
    'XXX.pem',
    null, ['https://www.googleapis.com/auth/bigquery']);

var request = {
    projectId: 'XXX',
    //all: true,

    auth: authClient
};

var list = bigquery.datasets.list(request, function(err, result) {
    if (err) {
        console.log(err);
    } else {
        console.log(result);
        return result;
    }
});

我的html是:

<!DOCTYPE html>
    <html lang = "en">

    <head>
    <title>Testing Server Call </title> 
    <script type = "text/javascript" src = "//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" ></script> 
    <script type = "text/javascript" >
    $(function() {
        $.ajax({
            type: 'GET',
            url: 'test.js'
            success: function(data) {
                console.log('yay');
                console.log(data);              
            },
            error: function(xhr, status, error) {
                console.log('Error: ' + error.message);
            }
        });


    });

</script> 
</head>
<body>
    hi there

</body>
</html>

我在过去几天进行了搜索和测试,并且不知道我错过了什么。我一直收到错误:Error: require is not defined我无法找到任何教程来帮助我完成这些步骤。提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

'use strict';
var http = require('http');
var google = require('XXX/lib/googleapis');
var bigquery = google.bigquery('v2');
var authClient = new google.auth.JWT(
    'XXX@XXX.iam.gserviceaccount.com',
    'XXX.pem',
    null, ['https://www.googleapis.com/auth/bigquery']);

var request = {
    projectId: 'XXX',
    //all: true,

    auth: authClient
};



var server = http.createServer(function(req, res){
    var list = bigquery.datasets.list(request, function(err, result) {
        if (err) {
            console.log(err);
        } else {
            console.log(result);
            response.end(result);
        }
    });
});
server.listen(8080, function(){});

在前端,您必须指定要提出请求的路线

<!DOCTYPE html>
    <html lang = "en">

    <head>
    <title>Testing Server Call </title> 
    <script type = "text/javascript" src = "//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" ></script> 
    <script type = "text/javascript" >
    $(function() {
        $.ajax({
            type: 'GET',
            url: 'http://localhost:8080/'
            success: function(data) {
                console.log('yay');
                console.log(data);              
            },
            error: function(xhr, status, error) {
                console.log('Error: ' + error.message);
            }
        });


    });

</script> 
</head>
<body>
    hi there

</body>
</html>

之后你必须在命令行node test.js

运行

答案 1 :(得分:0)

这里你使用test.js作为在客户端加载js的url。您不能在客户端使用require,因此是错误。您应该创建一条路线并将其交给那里。