NodeJS return axios 中的值获取
NodeJS return value in axios get
我在javascript中写了这个class但是我很难从axios请求中获取结果,下面我的情况可以更好地解释问题:
我在项目根目录的 classes 目录中有一个名为 vtiger.js 的文件
vtiger.js
const axios = require('axios');
var md5 = require('md5');
var qs = require('qs');
const https = require('https');
class vTiger {
constructor() {
this.url = process.env.VTIGER_URL;
this.username = process.env.VTIGER_USERNAME;
this.password = process.env.VTIGER_PASSWORD;
}
async getchallengeTokenVtiger() {
var token;
var tokenmd5 = false;
var url = this.url + 'webservice.php?operation=getchallenge&username=' + this.username;
axios.get(url,
{
headers: {
"content-type": "application/x-www-form-urlencoded"
},
httpsAgent: new https.Agent(
{
rejectUnauthorized: false
})
}).then(response => {
if (response.data.success) {
token = response.data.result.token;
tokenmd5 = md5(token + this.password);
return tokenmd5;
}
});
}
}
module.exports = vTiger
然后我在控制器文件夹中有一个名为 api.js 的文件,内容如下:
const http = require('http');
const axios = require('axios');
var qs = require('qs');
const vTiger = require('../classes/vtiger');
exports.welcome = (req, res, next) => {
const vtigerClass = new vTiger();
console.log(vtigerClass.getchallengeTokenVtiger())
res.status(200).json({
data: vtigerClass.getchallengeTokenVtiger()
});
}
从这个文件中得到的响应是:
{
"data": {}
}
从 console.log(vtigerClass.getchallengeTokenVtiger()) 行我得到这个:
Promise { undefined }
我哪里做错了?
谢谢
您可能不想在异步函数中使用 .then。你应该
const response = await axios.get(...)
if (response.data.success) {
token = response.data.result.token;
tokenmd5 = md5(token + this.password);
return tokenmd5;
}
else return null;
或者您可以在名为 tokenmd5 的函数中创建一个变量,即
let tokenmd5 = ''
在 .then 中设置它的值,然后 return tokenmd5 在函数的 then 结束时不在 .then
中
然后:
console.log 你想要:
exports.welcome = async (req, res, next) => {
const vtigerClass = new vTiger();
console.log(await vtigerClass.getchallengeTokenVtiger())
res.status(200).json({
data: vtigerClass.getchallengeTokenVtiger()
});
}
我在javascript中写了这个class但是我很难从axios请求中获取结果,下面我的情况可以更好地解释问题:
我在项目根目录的 classes 目录中有一个名为 vtiger.js 的文件
vtiger.js
const axios = require('axios');
var md5 = require('md5');
var qs = require('qs');
const https = require('https');
class vTiger {
constructor() {
this.url = process.env.VTIGER_URL;
this.username = process.env.VTIGER_USERNAME;
this.password = process.env.VTIGER_PASSWORD;
}
async getchallengeTokenVtiger() {
var token;
var tokenmd5 = false;
var url = this.url + 'webservice.php?operation=getchallenge&username=' + this.username;
axios.get(url,
{
headers: {
"content-type": "application/x-www-form-urlencoded"
},
httpsAgent: new https.Agent(
{
rejectUnauthorized: false
})
}).then(response => {
if (response.data.success) {
token = response.data.result.token;
tokenmd5 = md5(token + this.password);
return tokenmd5;
}
});
}
}
module.exports = vTiger
然后我在控制器文件夹中有一个名为 api.js 的文件,内容如下:
const http = require('http');
const axios = require('axios');
var qs = require('qs');
const vTiger = require('../classes/vtiger');
exports.welcome = (req, res, next) => {
const vtigerClass = new vTiger();
console.log(vtigerClass.getchallengeTokenVtiger())
res.status(200).json({
data: vtigerClass.getchallengeTokenVtiger()
});
}
从这个文件中得到的响应是:
{
"data": {}
}
从 console.log(vtigerClass.getchallengeTokenVtiger()) 行我得到这个:
Promise { undefined }
我哪里做错了?
谢谢
您可能不想在异步函数中使用 .then。你应该
const response = await axios.get(...)
if (response.data.success) {
token = response.data.result.token;
tokenmd5 = md5(token + this.password);
return tokenmd5;
}
else return null;
或者您可以在名为 tokenmd5 的函数中创建一个变量,即
let tokenmd5 = ''
在 .then 中设置它的值,然后 return tokenmd5 在函数的 then 结束时不在 .then
中然后: console.log 你想要:
exports.welcome = async (req, res, next) => {
const vtigerClass = new vTiger();
console.log(await vtigerClass.getchallengeTokenVtiger())
res.status(200).json({
data: vtigerClass.getchallengeTokenVtiger()
});
}