【问题标题】:Node.js Make HTTP request after GET request with queryNode.js 在使用查询的 GET 请求后发出 HTTP 请求
【发布时间】:2021-09-07 16:52:27
【问题描述】:

我正在尝试制作一个 REST API 来获取密钥以验证是否有人想使用我的 API,并且他已在我的数据库中注册,我给他回复。我正在使用 express、axios 和 mysql2。我的问题是,如果我只进行查询并给出响应,我会在 REST_API_KEY 和 APP_ID 中获取值。但是当我在查询后添加另一个 http 请求时,我得到 REST_API_KEY 和 APP_ID 为空。

// / 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);
    }

【问题讨论】:

    标签: mysql node.js http axios request


    【解决方案1】:

    这是因为pool.execute 刚刚启动,您的代码不会等待它完成就继续您的配置对象。

    您需要使用 async/await 或将配置对象包装在回调函数中。

    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);
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-15
      • 2012-03-23
      • 1970-01-01
      • 2017-04-23
      • 2018-08-04
      相关资源
      最近更新 更多