получение ошибки UnhandledPromiseRejectionWarning: Ошибка: невозможно установить заголовки после их отправки. в экспресс JS API - PullRequest
0 голосов
/ 02 октября 2019

Я работаю над экспресс-API js с jwtr, когда я запускаю API, это выдает мне ошибку:

UnhandledPromiseRejectionWarning: Ошибка: невозможно установить заголовки после их отправки.

Может кто-нибудь, пожалуйста, помогите мне, почему я получаю эту ошибку, здесь я добавил свой код, может кто-нибудь, пожалуйста, посмотрите его и помогите мне решить эту проблему,

const requireAuthentication = async(req, res, next) => {
    try {
        const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIxUWpuTDBhd2lTIiwiaWF0IjoxNTY5OTQwMjgyfQ.1xwX2OULW4RjKW4Ok13mwlJE8k95u-d0o7T6k5U9tjs'; //req.headers['vrc-access-token'];
        if (!token) return res.status(401).send('Failed to authenticate token.');
        let verify_token_data = await jwtr.verify(token, secret);
        if(typeof verify_token_data.jti != 'undefined') {
            req.body.username = verify_token_data.username;
            req.body.organization = verify_token_data.organization;
            req.body.userId = verify_token_data.id;
            req.body.organizationId = verify_token_data.organizationId;

            console.log("sdsd234");
            // create a new token
            const newToken = await jwtr.sign({
                username: verify_token_data.username,
                organization: verify_token_data.organization,
                id: verify_token_data.id,
                organizationId: verify_token_data.organizationId
            }, config['token-secret']);

            console.log(newToken);
            req.refreshToken = newToken;
            console.log('sdfdf');
            return await next();
        } else {
            return res.status(401).send('Failed to authenticate token.');
        }
    }  catch (error) {
        return res.status(401).send(error.message);
    }   
};

1 Ответ

0 голосов
/ 02 октября 2019

У меня была эта проблема раньше, и это происходит потому, что вы уже отправили ответ обратно на сервер, и он достигает кода, который отправляет ответ снова.

Я думаю, что проблема возникает, когда вы делаете return await next()

что вы должны сделать: next()

const requireAuthentication = async(req, res, next) => {
    try {
        const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIxUWpuTDBhd2lTIiwiaWF0IjoxNTY5OTQwMjgyfQ.1xwX2OULW4RjKW4Ok13mwlJE8k95u-d0o7T6k5U9tjs'; //req.headers['vrc-access-token'];
        if (!token) return res.status(401).send('Failed to authenticate token.');
        let verify_token_data = await jwtr.verify(token, secret);
        if(typeof verify_token_data.jti != 'undefined') {
            req.body.username = verify_token_data.username;
            req.body.organization = verify_token_data.organization;
            req.body.userId = verify_token_data.id;
            req.body.organizationId = verify_token_data.organizationId;

            // create a new token
            const newToken = await jwtr.sign({
                username: verify_token_data.username,
                organization: verify_token_data.organization,
                id: verify_token_data.id,
                organizationId: verify_token_data.organizationId
            }, config['token-secret']);

            console.log(newToken);
            req.refreshToken = newToken;
            next();
        } else {
            return res.status(401).send('Failed to authenticate token.');
        }
    }  catch (error) {
        return res.status(401).send(error.message);
    }   
};
...