Node.js 在带查询的 GET 请求后发出 HTTP 请求
Node.js Make HTTP request after GET request with query
我正在尝试制作一个 REST API 到 GET 密钥以验证是否有人想使用我的 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);
}
这是因为 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);
}
});
我正在尝试制作一个 REST API 到 GET 密钥以验证是否有人想使用我的 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);
}
这是因为 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);
}
});