[Node.js] Einsteiger Fehler mit google API beim oAuth

ismon

Lieutenant
Registriert
Dez. 2006
Beiträge
707
Hallo zusammen,

ich versuche mich gerade bissel an Note.js und wollte mal mit der google API rumspielen.

Ich habe mich an dieser Anleitung orientiert und für den Test das Beispiel kopiert (natürlich mit meinen API credentials).
https://developers.google.com/drive/web/quickstart/quickstart-nodejs

Leider erhalte ich beim ausführen immer einen Fehler:

/Users/ismon/Desktop/node_sample/google Drive Connect/connection.js:14
var auth = new googleapis.OAuth2Client(CLIENT_ID, CLIENT_SECRET, REDIRECT_URL)
^
TypeError: undefined is not a function
at Object.<anonymous> (/Users/ismon/Desktop/node_sample/google Drive Connect/connection.js:14:12)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:906:3

Kann mir jemand kurz auf die Sprünge helfen?

Gruß,
ismon
 
Danke für die Antwort.
Daran hab ich auch schon gedacht.
Aber die API ist mit NPM installiert. Die Daten liegen auch im Verzeichnis.

Andere Funktionen der API kann ich auch ohne Probleme verwenden.

Habe zum Test mal mit der URL Shortner Funktion gespielt:

Code:
var google = require('googleapis');
var urlshortener = google.urlshortener('v1');
var url = 'http://googletest.de/234234'

var params = { shortUrl: url };

// get the long url of a shortened url
urlshortener.url.get(params, function (err, response) {
  console.log('Long url is', response.longUrl);
});

Diese verwendet die gleiche API und das Beispiel läuft.
Ergänzung ()

Wenn ich das Script mit dem Debugger ausführe kommet der Fehler nach folgender Anweisung:

Code:
break in timers.js:126
 124             list.ontimeout();
 125           });
 126           process.domain = oldDomain;
 127         }
 128       }
debug> n

Eine timers.js kann ich leider in der gesamten google api nicht finden.
Ergänzung ()

Keine ne Idee?
 
Ist jetzt ein Schuss ins Blaue, aber in deinem einen Code-Beispiel exportierst du das Modul "googleapis" in eine Variable namens "google" - in deiner Fehlermeldung wird aber versucht auf eine Variable "googleapis" zugegriffen. Ohne deinen gesamten Code zu kennen, ist das schwer zu sagen, aber könnte das hier der Fehler sein?

Node.js kennt keine Namespaces wie C# oder Java. Wenn du ein Modul mit require() einbettest, dann fügt dieses im Normalfall (wenn es sauber geschrieben wurde), dem globalen Scope keine neuen Variablen oder Properties hinzu sonder liefert lediglich ein Objekt als Rückgabewert für require() zurück, über dessen Properties der einbettende Code nun auf die Methoden und Properties des Moduls zugreifen kann.

Wenn du nun das Modul so einbettest:

Code:
var google = require('googleapis');

Darfst du irgendwo anders in deinem Code nicht schreiben

Code:
var auth = new googleapis.OAuth2Client(CLIENT_ID, CLIENT_SECRET, REDIRECT_URL)

sondern

Code:
var auth = new google.OAuth2Client(CLIENT_ID, CLIENT_SECRET, REDIRECT_URL)
 
Hi,

danke für deine Antwort.
Ich glaube mein Post von oben ist durch die ganzen Edits etwas verwirrend.

Ich habe oben grundsätzlich zwei komplett von einander unabhängige Beispiele geposted. Deshalb der Unterscheid im Namen der Variablen.

Hier noch mal bissel geordneter.

Dieser Code:
Code:
var googleapis = require('googleapis'),
    readline = require('readline');

var CLIENT_ID = 'YOUR CLIENT ID HERE',
    CLIENT_SECRET = 'YOUR CLIENT SECRET HERE',
    REDIRECT_URL = 'YOUR REDIRECT URL HERE',
    SCOPE = 'https://www.googleapis.com/auth/drive.file';

var rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

var auth = new googleapis.OAuth2Client(CLIENT_ID, CLIENT_SECRET, REDIRECT_URL);

googleapis.discover('drive', 'v2').execute(function(err, client) {
  var url = auth.generateAuthUrl({ scope: SCOPE });
  var getAccessToken = function(code) {
    auth.getToken(code, function(err, tokens) {
      if (err) {
        console.log('Error while trying to retrieve access token', err);
        return;
      }
      auth.credentials = tokens;
      upload();
    });
  };
  var upload = function() {
    client.drive.files
      .insert({ title: 'My Document', mimeType: 'text/plain' })
      .withMedia('text/plain', 'Hello World!')
      .withAuthClient(auth).execute(console.log);
  };
  console.log('Visit the url: ', url);
  rl.question('Enter the code here:', getAccessToken);
});

Verursacht folgende Fehler:
Code:
/Users/ismon/Desktop/node_sample/google Drive Connect/connection.js:14
var auth = new googleapis.OAuth2Client(CLIENT_ID, CLIENT_SECRET, REDIRECT_URL)
^
TypeError: undefined is not a function
at Object.<anonymous> (/Users/ismon/Desktop/node_sample/google Drive Connect/connection.js:14:12)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:906:3
 
Du hast recht. Damit geht die instanzierung.

Den Rest aus meinem Beispiel muss ich jetzt auch nochmal durchschauen. Da stimmt wohl noch einiges anderes nicht.

Ich meld mich sobalds geklappt hat. :-)
 
Zurück
Oben