Не могу сохранить ответ на запрос-запрос в node.js - PullRequest
0 голосов
/ 05 августа 2020

Я создал функцию входа в систему, которая получает почту и пропуск, чтобы получать jwt. Я пробовал, чтобы функция возвращала jwt, но мне это не удалось.

Это метод, который я разработал, он имеет почтовый запрос, который отправляет параметры mail и pass. в переменной resp я пытаюсь сохранить ответ на запрос, но при вызове функции он печатает:

undefined.

login(mail, pass) {
  var options = {
      'method': 'POST',
      'url': 'https://inventario.demos.adlnetworks.com/api/login',
      'headers': {
          'Content-Type': 'application/json'
      },
      body: JSON.stringify({ "email": mail, "password": pass })
  };
  var resp;
  var req = request(options, function(error, response) {
      if (error) throw new Error(error);
      resp = response.body;
  });
  return resp;
}

1 Ответ

0 голосов
/ 05 августа 2020

Проблема в том, что «запрос» - это асинхронная c функция. Вы не можете этого сделать

var resp;
var req = request(options, function(error, response) {
    if (error) throw new Error(error);
    resp = response.body;
});
return resp;

Потому что "resp" всегда не определен. Вам нужно будет сделать что-то вроде этого

var resp;
var req = request(options, function(error, response) {
    if (error) throw new Error(error);
    return response.body;
});

Но это не сработает для вас. Краткое и простое решение: изменить библиотеку, чтобы сделать HTTP-запрос, и использовать «asyn c» и «await», чтобы легко использовать функции asyn c.

Например:

const fetch = require('node-fetch');

async function main(){
    const data = await login();
    console.log(data);
}

async function login(){

    const url = "https://jsonplaceholder.typicode.com/posts";
    const data = {
        title: 'foo22222',
        body: 'ba222r',
        userId: 1
    };

    const response = await fetch(url, {
        method: 'POST',
        body: JSON.stringify(data),
        headers: {
            "Content-type": "application/json; charset=UTF-8"
        }
    });
    const json = await response.json()
    return json;
}


main();

В этом случае я использую библиотеку « node-fetch » и использую бэкэнд (в функции входа в систему), который создает сообщение и возвращает его ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...