从 node.js 获取 bigquery 结果到浏览器
Posted
技术标签:
【中文标题】从 node.js 获取 bigquery 结果到浏览器【英文标题】:get bigquery results from node.js to browser 【发布时间】:2016-08-21 18:12:17 【问题描述】:我正在使用 node.js 运行谷歌计算引擎但我正在使用 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
,而且我找不到任何教程来帮助我完成完成此任务的步骤。提前感谢您的帮助。
【问题讨论】:
你可以尝试在“use strict”之前保留require语句吗? 谢谢。试过了,还是报错'require is not defined' @jm93 您是否在浏览器或节点控制台中遇到 require 错误? @owaishanif786 节点控制台工作正常,浏览器出错,谢谢 require 永远不会在浏览器中工作。所以你必须使用 node.js 控制台。要运行它以在浏览器中使用 require ,您必须使用 browserify.org 或 webpack。 【参考方案1】:'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
运行
【讨论】:
感谢您的快速帮助!我目前正在测试。我确实忘记提及我的生产端是谷歌计算引擎,但我正在使用 codeanywhere 工作区进行测试。希望没关系 不幸的是,在浏览器控制台中仍然收到“错误:未定义要求”,具体而言。如果我使用 localhost:8080 作为路由,我会得到“连接被拒绝” - 这是使用 codeanywhere 作为我的测试环境 谢谢,尝试了答案中的编辑代码。同样的错误。猜这是不可能的。感谢您的帮助。看来我必须付钱给某人,因为 *** 并不是真正为我需要的帮助而设计的。【参考方案2】:在这里,您使用 test.js 作为在客户端加载 js 的 url。您不能在客户端使用 require ,此错误也是如此。您应该创建一条路线并将其提供给那里。
【讨论】:
这部分让我感到困惑。 test.js 在服务器上,为什么它在客户端“加载”? test.js 在终端中运行良好,但将数据发送到浏览器却让我很头疼。不知道我错过了什么。 你写的ajax调用相当于jQuery.getScript();它用于在客户端加载脚本。 什么是可以工作的等效语法?我只想在服务器端获取 bigquery 结果并发送到浏览器。 您必须遵守@owaisshahhanif786 的建议。 Ajax 调用将有一个路由。在你的系统节点服务器应该通过键入 node test.js 来启动本地服务器。当您的节点服务器未启动时,可能会出现连接拒绝错误。 谢谢。我在终端中再次运行了“node test.js”。我在终端中收到服务器控制台消息,但是当我刷新 html 页面时,仍然被拒绝连接。以上是关于从 node.js 获取 bigquery 结果到浏览器的主要内容,如果未能解决你的问题,请参考以下文章
如何在 node.js 环境中将查询语句传递给 bigquery
如何使用 node.js MySQL 从 MySql DB 获取结果并将它们发送回 API.ai - DialogFlow