【问题标题】:getting error UnhandledPromiseRejectionWarning: Error: Can't set headers after they are sent. in express js api收到错误 UnhandledPromiseRejectionWarning:错误:发送后无法设置标头。在快递 js api 中
【发布时间】:2020-01-31 09:26:24
【问题描述】:

我正在使用 jwtr 开发 express js api,当我运行 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);
    }   
};

【问题讨论】:

    标签: node.js angular express node-modules


    【解决方案1】:

    我之前遇到过这个问题,它发生是因为您已经将响应发送回服务器并且它到达了再次发送响应的代码。

    我认为问题在于您何时这样做 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);
        }   
    };
    

    【讨论】:

      猜你喜欢
      • 2019-04-22
      • 2019-04-22
      • 1970-01-01
      • 2019-09-28
      • 1970-01-01
      • 2020-11-01
      • 2017-10-17
      • 1970-01-01
      相关资源
      最近更新 更多