alifnaiech
alifnaiech

Reputation: 87

Node.js Make HTTP request after GET request with query

I'm trying to make a REST API to GET key to verify if someone wants to use my API, and he is registered in my Database, I give him response. I'm using express, axios and mysql2. My problem is after if i make only the query and give the response, i get values into REST_API_KEY and APP_ID. But when i add after the query another http request, I get REST_API_KEY and APP_ID empty.

// / database.js file

const mysql = require('mysql2');
const database = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'helpme',
database: 'node-onesignal'
});

module.exports = database.promise();


// / controllers/index.js

const axios = require('axios');

const url = 'https://onesignal.com/api/v1';

const mysql = require('mysql2');

exports.getDevices = async(req, res, next)=>{
let auth = req.body.userApiKey
let REST_API_KEY = '';
let APP_ID = '';
const data = {
    "userApiKey" : auth
}
const query = "SELECT * FROM `node-onesignal`.users WHERE userApiKey=?;";
pool.execute(query, Object.values(data), (err, result, fields)=>{
    if(result == null || result == ''){
        res.status(400).json({status: "faillure"});
    }else{
        REST_API_KEY = result[0].osRestApiKey;
        APP_ID = result[0].osAppId;
    }
});
const config = {
            'headers': {
                'Content-Type': 'application/json',
                'Authorization': `Basic ${REST_API_KEY}`
            }
        }
        const response = await axios.get(url + `/players?app_id=${APP_ID}`, config)
                      .then(res=> res.data)
                      .catch(err=> console.log(err));
        res.json(response);
    }

Upvotes: 0

Views: 193

Answers (1)

Jonathan Nielsen
Jonathan Nielsen

Reputation: 1502

This is because pool.execute is just started, your code does not wait for it to finish before continuing to your config object.

You need to use async/await or wrap the config object inside the callback function.

pool.execute(query, Object.values(data), async (err, result, fields) => {
    if (result == null || result == '') {
        res.status(400).json({status: "faillure"});
    } else {
        REST_API_KEY = result[0].osRestApiKey;
        APP_ID = result[0].osAppId;
        
        const config = {
            'headers': {
                'Content-Type': 'application/json',
                'Authorization': `Basic ${REST_API_KEY}`
            }
        }

        const response = await axios.get(url + `/players?app_id=${APP_ID}`, config)
            .then(res=> res.data)
            .catch(err=> console.log(err));
        
        res.json(response);
    }
});

Upvotes: 1

Related Questions