2016-12-09 5 views
0

Борясь за получение nodeJS https.request или https.get для работы с API-интерфейсом imgur (также с помощью http-модуля). Вот мой код для https.request:Доступ к API imgur с помощью nodeJS - параметры работают в AJAX, но не в узлеJS

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' - это данные, а не ошибка. Является ли объект в 'err' ответом API? – 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

Да, это работает. Думаю, я просто отбросил запрос, не используя структуру обратного вызова функции «нормальная» (err, data) и используя незнакомый API. – Satki

+0

Нет проблем. Там есть пакет под названием [request] (https://github.com/request/request), который довольно популярен и немного приятнее использовать в некоторых ситуациях. Этот пакет следует шаблону 'function (err, data). – dan