javascript - NodeJS 在 axios 中返回 value 获取

我有这个 class 写在 javascript 但我很难从 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 }

我在哪里做错了?

谢谢

回答1

您可能不想在异步函数中使用 .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 中设置其 value,然后在函数的 then 末尾返回 tokenmd5 不在 .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()
    });
}

相似文章