Joshua Attridge
Joshua Attridge

Reputation: 25

How to make a post request in node.js

I am trying to send a post request to an api and It seems I am getting nothing outputting. I am using the request module for node.js although I dont know if my request is formatted correctly.

I havent tried much but just multiple different arrangements in my request

exports.detectSong = function(base64) {
    console.log("here1");
    var request = require('request');
    console.log("here2");

    request({
        url: 'https://audd.p.rapidapi.com',
        method: 'post',
        headers: { "X-RapidAPI-Host": "audd.p.rapidapi.com", 'X-RapidAPI-Key': '***************************************************' }, 
        timeout: 10000,
        body: JSON.stringify({
            audio: base64,
            method: 'recognize',
            return: 'lyrics,timecode'
        })
    }, function(error, result, body) {
        console.log("here3")
        if (error) {
            console.log(error);
        } else if (result.statusCode === 500) {
            console.log('error');
        } else {
            console.log(body);
        }
    });
    console.log("here4");
};

So within the console i expect to recieve the output of 'here4' when I do not get this below is the console out put I recieve:

10:42:17
START RequestId: 725f96ad-13e0-4d8b-a469-76161c5df2e4 Version: $LATEST
10:42:17
2019-06-25T10:42:17.817Z 725f96ad-13e0-4d8b-a469-76161c5df2e4 INFO here1
10:42:21
2019-06-25T10:42:21.019Z 725f96ad-13e0-4d8b-a469-76161c5df2e4 INFO here2
10:42:21
2019-06-25T10:42:21.199Z 725f96ad-13e0-4d8b-a469-76161c5df2e4 INFO here4
10:42:21
END RequestId: 725f96ad-13e0-4d8b-a469-76161c5df2e4
10:42:21
REPORT RequestId: 725f96ad-13e0-4d8b-a469-76161c5df2e4 Duration: 4037.28 ms Billed Duration: 4100 ms Memory Size: 128 MB Max Memory Used: 92 MB

And if it helps the value I get returned is null.

Thank you for your help!

Upvotes: 0

Views: 708

Answers (1)

Denis Buravlev
Denis Buravlev

Reputation: 26

REPORT RequestId: 725f96ad-13e0-4d8b-a469-76161c5df2e4 Duration: 4037.28 ms Billed Duration: 4100 ms Memory Size: 128 MB Max Memory Used: 92 MB

Are you using AWS lambda to run your code?

I guess that your lambda finished before your application recived response from a server. You can try to return a promise then AWS will wait while promise will be resolved or rejected.

exports.handler = function() {
var request = require('request');
var promise = new Promise(function (resolve, reject) {
    request({
        url: 'https://httpbin.org/post',
        method: 'post',
        body: JSON.stringify({})
    }, function (error, result, body) {
        if (error) {
            reject(error)
        }
        resolve(body)
    });
});

promise.then(function (result) {
    console.log(result);
}).catch(function (err) {
    console.error(err);
});

return promise;

};

Update:

handler.js - file that you use to describe your lambda

exports.handler = function(event, context, callback) {
    console.log("here1");
    var request = require('request');
    console.log("here2");
    var promise = new Promise(function(resolve, reject) {
        request({
            url: 'https://audd.p.rapidapi.com',
            method: 'post',
            headers: { "X-RapidAPI-Host": "audd.p.rapidapi.com", 'X-RapidAPI-Key': '***************************************************' },
            timeout: 10000,
            body: JSON.stringify({
                audio: base64,
                method: 'recognize',
                return: 'lyrics,timecode'
            })
        }, function(error, result, body) {
            console.log("here3");
            if (error) {
                console.log(error);
                reject(error)
            } else if (result.statusCode === 500) {
                console.log('error');
                reject(result.statusCode);
            } else {
                console.log(body);
                resolve(body);
            }
        });
    });
    console.log("here4");
    return promise;
};

Upvotes: 1

Related Questions