nodejs返回值

发布于 2025-01-30 06:15:26 字数 1841 浏览 1 评论 0原文

我用JavaScript编写了此类课程,但是我很难从Axios请求中获得结果,以下我的情况可以更好地解释问题:

我在project root

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

中的类目录中有一个名为vtiger.js的文件,然后我在控制器文件夹中有一个名为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 }

我在哪里做错?

谢谢

I have this class written in javascript but I have difficulty in obtaining the result from the axios request, below my situation to better explain the problem:

i have a file called vtiger.js in the classes directory in the project root

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

then I have a file called api.js in the controllers folder with this content:

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

from this file as an response I get:

{
    "data": {}
}

while from the console.log(vtigerClass.getchallengeTokenVtiger()) line I get this:

Promise { undefined }

Where am I doing wrong?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

桃气十足 2025-02-06 06:15:26

您可能不想在异步函数中使用。您应该

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的变量IE

let tokenmd5 = ''

其值。

设置
对于您的控制台,您想要:

exports.welcome = async (req, res, next) => {

    const vtigerClass = new vTiger();

    console.log(await vtigerClass.getchallengeTokenVtiger())

    res.status(200).json({
        data: vtigerClass.getchallengeTokenVtiger()
    });
}

you probably don't want to use the .then in an async function. you should

const response = await axios.get(...)
if (response.data.success) {
    token = response.data.result.token;
    tokenmd5 = md5(token + this.password);
    return tokenmd5;
}
else return null;

Or you can create a variable in your function called tokenmd5 i.e.

let tokenmd5 = ''

set its value in the .then, then return tokenmd5 at then end of your function NOT in the .then

THEN:
for your console.log you want:

exports.welcome = async (req, res, next) => {

    const vtigerClass = new vTiger();

    console.log(await vtigerClass.getchallengeTokenVtiger())

    res.status(200).json({
        data: vtigerClass.getchallengeTokenVtiger()
    });
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文