【问题标题】:Implementing curl with Node.JS, application just hangs, no response使用 Node.JS 实现 curl,应用程序只是挂起,没有响应
【发布时间】:2022-12-17 17:34:24
【问题描述】:

所以我正在尝试传递数据并使用 Node 从 Node.JS 端点执行与 cURL 非常相似的操作。 它挂起,没有反应,什么都没有。我什至没有看到是否有错误。它在 Postman 中没有响应。不确定这个想法是什么,因此这篇文章。

我发送给 POSTman 的数据是 json

{
  "account_bank":"044",
  "account_number":"0690000040",
  "amount":"700000.25",
  "narration":"test transfer",
  "currency":"NGN",
  "reference":"akhlm-pstmnpyt-rfxx007_PMCKDU_76554",
  "debit_currency":"NGN"
}

和主要代码。看起来像这样:

app.post("/api/local-transfers", async function (req, res, next) {
  try {
    if (
      !req.headers.authorization ||
      !req.headers.authorization.startsWith("Bearer ") ||
      !req.headers.authorization.split(" ")[1]
    ) {
      return res.status(422).json({ message: "Please Provide Token!" });
    }

    var account_bank = req.body.account_bank;
    var account_number = req.body.account_number;
    var amount = req.body.amount;
    var narration = req.body.narration;
    var currency = req.body.currency;
    var reference = req.body.refernce;
    var debit_currency = req.body.debit_currency;

    url = "https://api.flutterwave.com/v3/transfers";
    fetch(url, {
      method: "POST",
      headers: {
        Accept: "application/json",
        "Content-type": "application/json",
        Authorization: "Bearer FLWSECK_TEST-72fe360edef17334f4817a17407011bb-X",
      },
      body: JSON.stringify({
        account_bank: account_bank,
        account_number: account_number,
        amount: amount,
        narration: narration,
        currency: currency,
        reference: reference,
        debit_currency: debit_currency,
      }),
    })
      .then((response) => response.json())
      .then((responseJson) => {
        if (responseJson === "Transfer Queued Successfully") {
          return res.send({
            error: false,
            data: response.json(),
            message: "OK",
          });
        }
      });
  } catch (err) {
    next(err);
  }
});

它只是挂起,邮递员没有回应。有什么问题吗?

编辑

要求的.catch看起来像这样

app.post("/api/local-transfers", async function (req, res, next) {
  try {
    if (
      !req.headers.authorization ||
      !req.headers.authorization.startsWith("Bearer ") ||
      !req.headers.authorization.split(" ")[1]
    ) {
      return res.status(422).json({ message: "Please Provide Token!" });
    }

    var account_bank = req.body.account_bank;
    var account_number = req.body.account_number;
    var amount = req.body.amount;
    var narration = req.body.narration;
    var currency = req.body.currency;
    var reference = req.body.refernce;
    var debit_currency = req.body.debit_currency;

    url = "https://api.flutterwave.com/v3/transfers";
    fetch(url, {
      method: "POST",
      headers: {
        Accept: "application/json",
        "Content-type": "application/json",
        Authorization: "Bearer FLWSECK_TEST-72fe360edef17334f4817a17407011bb-X",
      },
      body: JSON.stringify({
        account_bank: account_bank,
        account_number: account_number,
        amount: amount,
        narration: narration,
        currency: currency,
        reference: reference,
        debit_currency: debit_currency,
      }),
    })
      .then((response) => response.json())
      .then((responseJson) => {
        if (responseJson === "Transfer Queued Successfully") {
          return res.send({
            error: false,
            data: response.json(),
            message: "OK",
          });
        }
      }).catch(error=>{ //added this catch here.
        throw error;
      });
  } catch (err) {
    next(err);
  }
});

【问题讨论】:

  • 我假设您使用的是 node-fetch,在这种情况下,fetch 函数是异步的,因此当 fetch 出错时,不会发回任何响应。在 fetch 调用中添加 .catch 并检查它是否出错
  • @Salim,补充说,还是一样。介意我分享源吗??
  • 我认为你的 if (responseJson === "Transfer Queued Successfully") 没有执行。 console log inside if condition 并检查是否有条件进入内部。
  • @MuhammadFazeel,responseJson 确实不起作用。我该怎么办?

标签: node.js rest curl postman


【解决方案1】:

好的,我让它工作了。 刚好在我这边做了一些阅读。错误是,responseJson 它没有在那个区域内执行任何东西,因此改变它,我设法让它运行。所以改变从

url = "https://api.flutterwave.com/v3/transfers";
    fetch(url, {
      method: "POST",
      headers: {
        Accept: "application/json",
        "Content-type": "application/json",
        Authorization: "Bearer FLWSECK_TEST-72fe360edef17334f4817a17407011bb-X",
      },
      body: JSON.stringify({
        account_bank: account_bank,
        account_number: account_number,
        amount: amount,
        narration: narration,
        currency: currency,
        reference: reference,
        debit_currency: debit_currency,
      }),
    })
      .then((response) => response.json())
      .then((responseJson) => {
        if (responseJson === "Transfer Queued Successfully") {
          return res.send({
            error: false,
            data: response.json(),
            message: "OK",
          });
        }
      });
  } catch (err) {
    next(err);
  }
});

为此:

app.post("/api/local-transfers", async function (req, res, next) {
  try {
    if (
      !req.headers.authorization ||
      !req.headers.authorization.startsWith("Bearer ") ||
      !req.headers.authorization.split(" ")[1]
    ) {
      return res.status(422).json({ message: "Please Provide Token!" });
    }

    var account_bank = req.body.account_bank;
    var account_number = req.body.account_number;
    var amount = req.body.amount;
    var narration = req.body.narration;
    var currency = req.body.currency;
    var reference = req.body.refernce;
    var debit_currency = req.body.debit_currency;

    url = "https://api.flutterwave.com/v3/transfers";
    fetch(url, {
      method: "POST",
      headers: {
        Accept: "application/json",
        "Content-type": "application/json",
        Authorization: "Bearer FLWSECK_TEST-72fe360edef17334f4817a17407011bb-X",
      },
      body: JSON.stringify({
        account_bank: account_bank,
        account_number: account_number,
        amount: amount,
        narration: narration,
        currency: currency,
        reference: reference,
        debit_currency: debit_currency,
      }),
    })
      .then((response) => response.json())
      .then((json) => {
        return res.send({ error: false, data: json, message: "OK" });
      })
      .catch((err) => {
        throw err;
      });
  } catch (err) {
    next(err);
  }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    相关资源
    最近更新 更多