2016-12-09 39 views
0

努力獲取nodeJS https.request或https.get與imgur API一起工作(也嘗試使用http模塊)。這裏是我的https.request代碼:使用nodeJS訪問imgur API - 參數在AJAX中工作,但不在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'); 
} 

}); 

它返回錯誤消息console.log。

下面是使用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) 
    } 
    }) 

}); 

在這裏沒有人有在得到imgur API工作的經驗嗎?我錯過了什麼?

+0

'err'的內容是什麼? – dan

+0

一個血腥的偉大的對象/數組,在控制檯中被裁剪。給我幾分鐘,我會嘗試提取它。 – Satki

+0

根據[docs](https://nodejs.org/dist/v4.7.0/docs/api/https.html#https_https_request_options_callback),來自'https.request'的回調中的第一個參數是數據,而不是錯誤。 API響應中是否有'err'對象? – dan

回答

0

看看https docs。您需要進行一些更改:

請求回調中的第一個參數是響應,而不是錯誤。如果您想檢查錯誤,則可以根據請求偵聽error事件。

一旦請求已收到數據,然後您可以輸出它。

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

我確實有.end();包括,只是忘了把它放在上面的片段。我會嘗試一下你的語法,看看它是否有效。 – Satki

+0

是的,這是有效的。認爲我剛剛被請求拋出請求不使用'正常'功能(錯誤,數據)回調結構和使用不熟悉的API。 – Satki

+0

沒問題。有一個名爲[request](https://github.com/request/request)的包,在一些情況下非常流行並且更好用。該包遵循'function(err,data)'模式。 – dan