【问题标题】:NodeJs, Axios: Value of variable not updating with response from xhr requestNodeJs,Axios:变量的值未随 xhr 请求的响应而更新
【发布时间】:2021-07-25 22:00:54
【问题描述】:

我正在使用 Axios 在 nodejs 中发出 xhr 请求。我正在尝试将此响应中的值保存到变量中,但它不起作用,我不知道为什么。

代码:

let redirectUrl = 'placeholder'
axios.get(url)
      .then(res => {
        redirectURL = res.url
        console.log(res.url, "HERE")
      })
      .catch(err => console.log(err))
      return res.render('index',{url: redirectURL})

我尝试在全局和本地范围内将redirectUrl 声明为var,但该值没有改变,当我在控制台记录此值时,它会记录placeholder。 index 是 index.jsx,因为我使用 jsx 作为模板引擎。 如果我应该提供更多信息,请告诉我。 提前谢谢你。

【问题讨论】:

  • 如果它返回“占位符”,您确定“res.url”会返回或应该返回除请求的 URL 之外的任何内容吗?如果 Response 包含 URL,那么您应该从 Response 对象中的 Data 中提取它。如果我有误解,请纠正我
  • 当我控制台日志 res.url 它记录正确的预期值。不过,对不起,我不明白你从响应对象中提取的意思。

标签: node.js http axios jsx httpresponse


【解决方案1】:

axios.get 是一个异步调用,因此您的返回将使用原始 (placeholder) 值而不是新值。通常为了解决这种异步我使用async/await

async function getRedirectURL(url) {
  try {
    const res = await axios.get(url);
    // Note that if you want some return value from axios call you access it by res.data
    console.log('res.url :', res.url, ". res.data:", res.data);
    return res.render('index',{url: res.data.url});
  } catch (err) {
    console.log(err);
    throw err;
  }
}
      

【讨论】:

    【解决方案2】:

    Axios 是一个基于 Promise 的 HTTP 客户端,因此当 javascript 引擎执行您的代码时,它会将 axios 调用从 callstack(第 2 行)移至 Web API,然后开始执行最后一行 return res.render('index',{url: redirectURL}) where redirectURL value是占位符。您必须在 promise then 方法中编写所有逻辑,例如

    axios
      .get(url)
      .then((data) => res.render("index", { url: data.url }))
      .catch((err) => {
        // error response
        console.log(err);
      });
      
    

    【讨论】:

    • 我已经尝试过了,但它不起作用,它一直在加载页面并且不呈现任何内容。但是谢谢,答案是使用@tam.teixeira 的解决方案解决的
    猜你喜欢
    • 1970-01-01
    • 2018-04-14
    • 2020-07-22
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    相关资源
    最近更新 更多