NodeJS - вернуть JSON из запроса - PullRequest
0 голосов
/ 02 июля 2018

В настоящее время я делаю некоторые вещи в NodeJS, и теперь у меня есть следующая проблема: Когда я получаю JSON-объект из HTTP-запроса и хочу его вернуть, он показывает "undefined".

Вот мой не работающий NodeJS код:

 function verifyUser(uname,pword){
    var options = {
        url: 'CENSORED',
        method: 'POST',
        headers: headers,
        form: {'Username':uname, 'Password':pword, 'Key':key}
    }
    request(options,function(error,response,body){
        if(!error && response.statusCode == 200){
            return body;
        }
    })    
}

var test1 = verifyUser("RobDeFlop","CENSORED");
console.log(test1);

Но когда я заменяю return на console.log, это показывает мне объект json. Я надеюсь, что кто-то может помочь мне:)

1 Ответ

0 голосов
/ 02 июля 2018

Ах, радости изучения асинхронных js в узле в первый раз: 3

Как уже упоминалось @Mark_M, ваша функция в запросе вызывается только после обработки запроса. В результате вы не можете вернуть переменную из функции verifyUser (). verifyUser () возвращается сразу после того, как отправил запрос, и вызывает функцию request () после получения ответа.

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

//We'll define some function called 'callback'
function verifyUser(uname,pword, callback){
    var options = {
        url: 'CENSORED',
        method: 'POST',
        headers: headers,
        form: {'Username':uname, 'Password':pword, 'Key':key}
    }
    request(options,callback);
    // Here I've changed your inline callback function to the one passed to verifyUser as an argument. 
}


// Then, your main code:
verifyuser("RobDeFlop","CENSORED", next);
function next(error,response,body){
        if(!error && response.statusCode == 200){
            //Do useful stuff with the body here.
        }
    })    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...