0

Ich führe eine Google-Compute-Engine mit node.js , aber teste mit codeanywhere. Ich bin in der Lage, eine bigquery Anfrage auf codeanywhere Terminal zu führen und Resultate zu erhalten, die auf der Terminalkonsole angezeigt werden.Bigquery-Ergebnisse von node.js zum Browser

aber wenn ich versuche, das gleiche von einer HTML-Seite zu tun, kann ich nicht ganz bekommen, die Ergebnisse an den Benutzer/Browser zurückzukehren.

Die einzigen Knotenmodule, die ich auf codeanywhere installiert habe, sind Firebase und googleapis.

Ich möchte den BigQuery-Aufruf auf der Serverseite ausführen, weil ich die Auth-Informationen verborgen halten möchte; ansonsten würde einfach bigquery api von javascript laufen.

mein test.js ist:

'use strict'; 

var google = require('XXX/lib/googleapis'); 
var bigquery = google.bigquery('v2'); 
var authClient = new google.auth.JWT(
    '[email protected]', 
    '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; 
    } 
}); 

und mein html ist:

<!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> 

Ich habe letzten paar Tage gesucht und getestet und haben keine Ahnung, was ich vermisst. Ich bekomme immer Fehler wie: Error: require is not defined und ich kann keine Tutorials finden, die mir bei den Schritten helfen, dies zu erreichen. Vielen Dank im Voraus für jede Hilfe.

+0

Können Sie versuchen, die require-Anweisung vor "use strict" zu halten? –

+0

danke. versucht, dass, immer noch der Fehler 'require ist nicht definiert' – jm93

+0

@ jm93 erhalten Sie Fehler in Browser oder Node-Konsole erforderlich? – owaishanif786

Antwort

0
'use strict'; 
var http = require('http'); 
var google = require('XXX/lib/googleapis'); 
var bigquery = google.bigquery('v2'); 
var authClient = new google.auth.JWT(
    '[email protected]', 
    '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(){}); 

Am Frontend müssen Sie Route angeben, wo Sie Anfrage

<!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> 

Danach müssen Sie nur noch auf Command node test.js

+0

danke für schnelle Hilfe! Ich teste gerade. Ich habe vergessen zu erwähnen, dass meine Produktionsseite Google Compute Engine ist, aber ich teste mit codeanywhere workspace. hoffe, dass das keine Rolle spielt – jm93

+0

leider immer noch die "Fehler: erforderlich ist nicht definiert" in der Browser-Konsole, um genau zu sein. und wenn ich http: // localhost: 8080/als route benutze, bekomme ich 'connection refused' - das benutzt codeanywhere als meine testumgebung – jm93

+0

danke, habe den bearbeiteten code aus der antwort ausprobiert. gleicher Fehler denke, das ist unmöglich. danke für die Hilfe. sieht aus, dass ich jemanden bezahlen muss, weil stackoverflow nicht wirklich für die Hilfe, die ich brauche, entwickelt wurde. – jm93

0

Hier Sie verwenden test.js als url machen laufen die lädt js auf der Client-Seite. Sie können die Anforderung nicht auf der Clientseite verwenden, und so ist dieser Fehler. Sie sollten eine Route erstellen und dort eingeben.

+0

das ist was mich teilweise verwirrt. Die test.js befindet sich auf dem Server. Warum wird es im Client "geladen"? test.js funktioniert im Terminal gut, aber die Daten zum Browser zu bekommen ist das, was mich umbringt. keine Ahnung was mir fehlt. – jm93

+0

Der von Ihnen geschriebene Ajax-Aufruf entspricht jQuery.getScript(); Es dient zum Laden von Skripten auf Client-Seite. –

+0

Was könnte äquivalente Syntax sein, die funktionieren könnte? Ich möchte nur das Bigquery-Ergebnis auf der Serverseite erhalten und an den Browser senden. – jm93

Verwandte Themen