首页 > 解决方案 > 仅当错误代码为 403 时才尝试登录

问题描述

我没有 API 检查令牌是否过期。我必须进行 GET 调用,如果我403从 API 收到错误,那么我应该重新登录。

我尝试过:

app.get = async (body) => {

    return new Promise((resolve, reject) => {

        let user = await user.findOne({
            where: {
                accountId: body.accountId
            }
        });

        if(user){
            body.accessToken = user.accessToken;
        } else {
            body.accessToken  = await app.login(); 
        }

        request(
        {
            headers: {
                'Accept': 'application/json',
                'Authorization': 'Bearer ' + body.accessToken
            },
            method: 'GET',
            uri: `${config.acs.url}${body.url}`,
            json: true
        }
        )

        .then((response) => {
            resolve(response);
        })
        .catch((error) => {
            // logger.info(error);

            if(error.statusCode == 403){
                body.accessToken  = await app.login(); <<------------- 
                app.get(body);
            }

            reject(error);
        });

    });

}

我不知道如何避免这个错误。

SyntaxError: await 仅在async函数中有效

我已经有了

app.get = async (body) => { ...

只有当我在错误块中获得 403 代码时才需要重新登录。

如何重新构建我的代码以实现我所描述的?

标签: javascriptnode.jsexpress

解决方案


中使用的函数Promise不是async函数

试试这个片段

app.get = async (body) => {
    let resolve, reject;
    const promise = new Promise((re, rj) => {
        resolve = re;
        reject = rj;
    });

    let user = await user.findOne({
        where: {
            accountId: body.accountId
        }
    });

    if(user){
        body.accessToken = user.accessToken;
    } else {
        body.accessToken  = await app.login(); 
    }

    request(
    {
        headers: {
            'Accept': 'application/json',
            'Authorization': 'Bearer ' + body.accessToken
        },
        method: 'GET',
        uri: `${config.acs.url}${body.url}`,
        json: true
    }
    )

    .then((response) => {
        resolve(response);
    })
    .catch(async (error) => {
        // logger.info(error);

        if(error.statusCode == 403){
            body.accessToken  = await app.login(); <<------------- 
            app.get(body);
        }

        reject(error);
    });

    return promise;
}

推荐阅读