2016-12-09 1 views
0

Schwierigkeiten, nodeJS https.request oder https.get mit der API imgur (auch mit HTTP-Modul versucht) zu bekommen. Hier ist mein Code für eine https.request:Zugriff auf die API imgur mit nodeJS - Parameter funktionieren in AJAX, aber nicht in nodeJS

var https = require('https') 

var imgurAPIOptions = { 
    hostname : 'api.imgur.com', 
    path: '/3/gallery/search/time/1/?q=cat', 
    headers: {'Authorization': 'Client-ID xxxxxxxxxxxx'}, 
    json: true, 
    method: 'GET' 
}; 

https.request(imgurAPIOptions,function(err,imgurResponse){ 
    if (err) {console.log('ERROR IN IMGUR API ACCESS') 

} else { 

    console.log('ACCESSED IMGUR API'); 
} 

}); 

Es gibt die Fehlermeldung console.log.

Hier ist die (Arbeits-) Code für eine gleichwertige Client-Seite Anfrage jQuery AJAX:

$(document).ready(function(){ 

    $.ajax({ 
     headers: { 
    "Authorization": 'Client-ID xxxxxxxxxxxx' 
    }, 
    url: 'https://api.imgur.com/3/gallery/search/time/1/?q=cat', 
    success:function(data){ 
     console.log(data) 
    } 
    }) 

}); 

Hat jemand hier hatte keine Erfahrung in der Imgur API bekommen zu arbeiten? Was vermisse ich?

+0

Was ist der Inhalt von 'err'? – dan

+0

Ein verdammt großartiges Objekt/Array, das in der Konsole abgeschnitten wird. Gib mir ein paar Minuten und ich versuche es zu extrahieren. – Satki

+0

Laut der [docs] (https://nodejs.org/dist/v4.7.0/docs/api/https.html#https_https_request_options_callback) ist der erste Parameter im Callback von 'https.request' Daten, kein Fehler. Ist das Objekt in "err" die API-Antwort? – dan

Antwort

0

Werfen Sie einen Blick auf die https docs. Sie müssen einige Änderungen vornehmen:

Der erste Parameter im Request Callback ist die Antwort und nicht ein Fehler. Wenn Sie nach Fehlern suchen möchten, können Sie auf Anfrage auf das Ereignis error warten.

Sobald die Anfrage Daten erhalten hat, können Sie sie ausgeben.

var https = require('https'); 

var options = { 
    hostname: 'api.imgur.com', 
    path: '/3/gallery/search/time/1/?q=cat', 
    headers: {'Authorization': 'Client-ID xxxxxxxxxxxx'}, 
    method: 'GET' 
}; 

var req = https.request(options, function(res) { 
    console.log('statusCode:', res.statusCode); 
    console.log('headers:', res.headers); 

    res.on('data', function(d) { 
    process.stdout.write(d); 
    }); 
}); 

req.on('error', function(e) { 
    console.error(e); 
}); 

req.end(); 
+0

Ich hatte tatsächlich .end(); enthalten, habe nur vergessen, es auf den Schnipsel oben zu setzen. Ich werde es mit Ihrer Syntax versuchen, sehen Sie, ob es funktioniert. – Satki

+0

Ja, das funktioniert. Ich denke, ich wurde auf Anfrage einfach abgeworfen, ohne die Callback-Struktur der "normalen" Funktion (err, data) zu verwenden und eine unbekannte API zu verwenden. – Satki

+0

Kein Problem. Es gibt ein Paket namens [request] (https://github.com/request/request), das sehr beliebt ist und in manchen Situationen etwas netter ist. Dieses Paket folgt dem Muster 'function (err, data)'. – dan