【问题标题】:I can't save the response of a request request in node.js我无法在 node.js 中保存请求请求的响应
【发布时间】:2020-11-25 01:45:23
【问题描述】:

我创建了一个接收邮件和通行证的登录功能,以接收jwt。我试过该函数返回jwt,但我没有成功。

这是我开发的方法,它有一个发送mailpass 参数的post 请求。在resp 变量中,我尝试保存请求响应,但是在调用它打印的函数时:

未定义。

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;
}

【问题讨论】:

  • 你能说明你是如何以及在哪里调用这个函数的吗?还有一些关于你的 package.json 文件的细节?

标签: node.js api request jwt


【解决方案1】:

问题在于“请求”是一个异步函数。你不能这样做

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请求,并使用“async”和“await”轻松使用异步函数。

例如:

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”库并使用一个后端(在登录函数中)创建一个帖子并返回其响应。

【讨论】:

  • 谢谢 Agustin,请问如何保存 jwt 值以便在下一个请求中使用?
猜你喜欢
  • 2014-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-13
  • 2014-08-15
  • 2018-01-05
  • 1970-01-01
相关资源
最近更新 更多