How is an HTTP POST request made in node.js?

后端 未结 21 2316
南方客
南方客 2020-11-21 23:54

How can I make an outbound HTTP POST request, with data, in node.js?

相关标签:
21条回答
  • 2020-11-22 00:09

    This is the simplest way I use to make request: using 'request' module.

    Command to install 'request' module :

    $ npm install request
    

    Example code:

    var request = require('request')
    
    var options = {
      method: 'post',
      body: postData, // Javascript object
      json: true, // Use,If you are sending JSON data
      url: url,
      headers: {
        // Specify headers, If any
      }
    }
    
    request(options, function (err, res, body) {
      if (err) {
        console.log('Error :', err)
        return
      }
      console.log(' Body :', body)
    
    });
    

    You can also use Node.js's built-in 'http' module to make request.

    0 讨论(0)
  • 2020-11-22 00:10

    After struggling a lot while creating a low level utility to handle the post and get requests for my project, I decided to post my effort here. Much on the lines of accepted answer, here is a snippet for making http and https POST requests for sending JSON data.

    const http = require("http")
    const https = require("https")
    
    // Request handler function
    let postJSON = (options, postData, callback) => {
    
        // Serializing JSON
        post_data = JSON.stringify(postData)
    
        let port = options.port == 443 ? https : http
    
        // Callback function for the request
        let req = port.request(options, (res) => {
            let output = ''
            res.setEncoding('utf8')
    
            // Listener to receive data
            res.on('data', (chunk) => {
                output += chunk
            });
    
            // Listener for intializing callback after receiving complete response
            res.on('end', () => {
                let obj = JSON.parse(output)
                callback(res.statusCode, obj)
            });
        });
    
       // Handle any errors occurred while making request
        req.on('error', (err) => {
            //res.send('error: ' + err.message)
        });
    
        // Request is made here, with data as string or buffer
        req.write(post_data)
        // Ending the request
        req.end()
    };
    
    let callPost = () => {
    
        let data = {
            'name': 'Jon',
            'message': 'hello, world'
        }
    
        let options = {
            host: 'domain.name',       // Your domain name
            port: 443,                 // 443 for https and 80 for http
            path: '/path/to/resource', // Path for the request
            method: 'POST',            
            headers: {
                'Content-Type': 'application/json',
                'Content-Length': Buffer.byteLength(data)
            }
        }
    
        postJSON(options, data, (statusCode, result) => {
            // Handle response
            // Process the received data
        });
    
    }
    
    0 讨论(0)
  • 2020-11-22 00:11

    You can use request library. https://www.npmjs.com/package/request

    var request = require('request');
    

    To post JSON data:

    var myJSONObject = { ... };
    request({
        url: "http://josiahchoi.com/myjson",
        method: "POST",
        json: true,   // <--Very important!!!
        body: myJSONObject
    }, function (error, response, body){
        console.log(response);
    });
    

    To post xml data:

    var myXMLText = '<xml>...........</xml>'
    request({
        url: "http://josiahchoi.com/myjson",
        method: "POST",
        headers: {
            "content-type": "application/xml",  // <--Very important!!!
        },
        body: myXMLText
    }, function (error, response, body){
        console.log(response);
    });
    
    0 讨论(0)
  • 2020-11-22 00:18

    Request-Promise Provides promise based response. http response codes other than 2xx will cause the promise to be rejected. This can be overwritten by setting options.simple = false

    var options = {
      method: 'POST',
      uri: 'http://api.posttestserver.com/post',
      body: {
      some: 'payload'
     },
      json: true // Automatically stringifies the body to JSON
    };
    
    rp(options)
    .then(function (parsedBody) {
        // POST succeeded...
    })
    .catch(function (err) {
        // POST failed...
    });
    
    0 讨论(0)
  • 2020-11-22 00:19

    Axios is a promise based HTTP client for the browser and Node.js. Axios makes it easy to send asynchronous HTTP requests to REST endpoints and perform CRUD operations. It can be used in plain JavaScript or with a library such as Vue or React.

    const axios = require('axios');
    
            var dataToPost = {
              email: "your email",
              password: "your password"
            };
    
            let axiosConfiguration = {
              headers: {
                  'Content-Type': 'application/json;charset=UTF-8',
                  "Access-Control-Allow-Origin": "*",
              }
            };
    
            axios.post('endpoint or url', dataToPost, axiosConfiguration)
            .then((res) => {
              console.log("Response: ", res);
            })
            .catch((err) => {
              console.log("error: ", err);
            })
    
    0 讨论(0)
  • 2020-11-22 00:20

    Update 2020:

    I've been really enjoying phin - The ultra-lightweight Node.js HTTP client

    It can be used in two different ways. One with Promises (Async/Await) and the other with traditional callback styles.

    Install via: npm i phin

    Straight from it's README with await:

    const p = require('phin')
    
    await p({
        url: 'https://ethanent.me',
        method: 'POST',
        data: {
            hey: 'hi'
        }
    })
    


    Unpromisifed (callback) style:

    const p = require('phin').unpromisified
    
    p('https://ethanent.me', (err, res) => {
        if (!err) console.log(res.body)
    })
    

    As of 2015 there are now a wide variety of different libraries that can accomplish this with minimal coding. I much prefer elegant light weight libraries for HTTP requests unless you absolutely need control of the low level HTTP stuff.

    One such library is Unirest

    To install it, use npm.
    $ npm install unirest

    And onto the Hello, World! example that everyone is accustomed to.

    var unirest = require('unirest');
    
    unirest.post('http://example.com/helloworld')
    .header('Accept', 'application/json')
    .send({ "Hello": "World!" })
    .end(function (response) {
      console.log(response.body);
    });
    


    Extra:
    A lot of people are also suggesting the use of request [ 2 ]

    It should be worth noting that behind the scenes Unirest uses the request library.

    Unirest provides methods for accessing the request object directly.

    Example:

    var Request = unirest.get('http://mockbin.com/request');
    
    0 讨论(0)
提交回复
热议问题