2015-11-22 5 views
1

Привет Я пытаюсь получить ответ через http с помощью метода обратного вызова. Но я получаю сообщение о том, что обратный вызов не является функцией.Обратный вызов HTTP-запроса на узле JS

module.exports.ipLookup = function (res, callback) { 
    var http = require('http'); 
    var str = ''; 
    var options = { 
     host: 'ip-api.com', 
     port: 80, 
     path: '/json/', 
     method: 'POST' 
    }; 
    var str= ""; 
    var req = http.request(options, function (res) { 
     res.on('data', function (body) { 
      str += body; 
     }); 

     res.on('end', function() { 
      callback(str); 
     }); 
    }); 


    req.end(); 

    return str; 

    } 

Что нужно, чтобы возвратить ответ json api через ip-api.com. Если кто-то может мне помочь в этом, мы будем очень благодарны.

+1

Как вы используете/вызываете 'ipLookup()'? Здесь будет определено значение «обратного вызова». –

+0

@JonathanLonowski, спасибо за ответ. Мне нужен файл js в другой файл. например var lookup = require ('ip'); используя lookup.ip(); – mattts

ответ

4

В другом файле вы загружаете функцию из вас, чтобы убедиться, что используется параметр обратного вызова. См фрагмент ниже

var Lookup = require('./ip'); 
Lookup.ipLookup(function (response) { 

    console.log(response) // check if response is valid 
}) 

Вы должны изменить экспортируемую функцию, чтобы принимать только один параметр, как первый параметр не используется внутри тела функции, как так.

module.exports.ipLookup = function (callback) { 

    var http = require('http'); 
    var str = ''; 
    var options = { 
     host: 'ip-api.com', 
     port: 80, 
     path: '/json/', 
     method: 'POST' 
    }; 

    var req = http.request(options, function (res) { 

     res.on('data', function (body) { 
      str += body; 
     }); 

     res.on('end', function() { 
      return callback(str); 
     }); 
    }); 
    req.end(); 

} 
+0

спасибо, что это сработало как шарм, еще один вопрос: как сделать переменную «ответ» доступной из области переменных? Надеюсь, ты сможешь помочь мне в этом. thanks – mattts

+0

Либо установите переменную, которая может использоваться другими функциями или экспортирована в другой модуль, который будет использоваться. Или цепочку как часть серии задач и работу над объектами для достижения того, что вы хотите сделать? Что вы хотите сделать с контекстом? –

+0

то, что я хочу сделать, в этом случае использует «ответ» как массив и разбивает значения и назначает их отдельно. Снова спасибо за помощь – mattts

Смежные вопросы