如何通过NodeJS向一个端点发起Ajax请求

22
我正在使用NodeJS。我的一个函数(称之为funcOne)接收一些输入,我将其传递给另一个函数(称之为funcTwo),后者生成一些输出。
在将输入传递给funcTwo之前,我需要通过Ajax调用端点传递输入,然后必须将由AJAX调用产生的输出传递给funcTwo。只有在AJAX调用成功时才应调用funcTwo。
如何在NodeJS中实现这一点?我想知道是否可以在这种情况下利用Q Library
2个回答

16
使用request
function funcOne(input) { 
  var request = require('request');
  request.post(someUrl, {json: true, body: input}, function(err, res, body) {
      if (!err && res.statusCode === 200) {
          funcTwo(body, function(err, output) {
              console.log(err, output);
          });
      }
  });
}

function funcTwo(input, callback) {
    // process input
    callback(null, input);
}

编辑:由于请求已被弃用,您可以在此处找到替代方案here
您还可以使用随最新版本的nodejs(18+)一起提供的内置fetch API。请参阅下面的示例。
async function funcOne(input) {
  try {
    const response = await fetch(someUrl, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(input),
    });

    if (response.ok) {
      const body = await response.json();
      funcTwo(body, (err, output) => {
        console.log(err, output);
      });
    }
  } catch (err) {
    // Handle errors here
    console.error(err);
  }
}

function funcTwo(input, callback) {
  // process input
  callback(null, input);
}

1
请求现已过时!:-( - TheMiddle

5

由于request已经过时,我建议使用axios。

npm install axios@0.16.2

const axios = require('axios');

axios.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY')
  .then(response => {
    console.log(response.data.url);
    console.log(response.data.explanation);
  })
  .catch(error => {
    console.log(error);
  });

使用标准的http库发送请求需要更多的努力来解析/获取数据。对于那些习惯于仅在Java/JavaScript中进行AJAX请求的人来说,我发现axios很容易掌握。

https://www.twilio.com/blog/2017/08/http-requests-in-node-js.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接