Nodejs / javascript — Не удается установить заголовки после их отправки клиенту отображается ошибка

#javascript #node.js #rest #asynchronous #promise

#javascript #node.js #rest #асинхронный #обещание

Вопрос:

Я получаю:

(узел: 38891) Предупреждение о необработанном отказе: Ошибка [ERR_HTTP_HEADERS_SENT]: не удается установить заголовки после их отправки клиенту по ClientRequest.setHeader (_http_outgoing.js:485:11)

Не уверен, почему это происходит, когда setHeader функция вызывается внутри инструкции conditinal.

 cons y = proxy({
        target: BackendEndPoint,
        onProxyReq(proxyReq, req, res) {
            logger.info('initial frontend request headers: '   JSON.stringify(req.headers))
            proxyReq.setHeader('CLIENT-ID', 'project')
            secretManager.awsSecretManger('frontend.encryptor').then(secret => {

                if (req.hostname == 'localhost') {
                    logger.info("setting claims AJ")
                    proxyReq.setHeader('X-CLAIMS', enc.encrypt(secret.key, JSON.stringify({
                        aid: "TestAid",
                        sessionId: "TestUUID",
                        roles: ["a1", "a2", "a3",
                            "a4", "a5", "a6", "a7"],
                        userName: "TestUSer"
                    })))
                    return
                } else if (req.claims) {
                    logger.info("setting claims found")
                    var proxyHeader = enc.encrypt(secret.key, req.claims)
                    return proxyReq.setHeader('X-CLAIMS', proxyHeader)
                }
            })
        },
        changeOrigin: (Origin === 'true')
    }
)
  

Вызов функции:

 app.use('/api', authHeader, y)
  

Комментарии:

1. Каков контекст для этой функции? Как это называется?

2. вот как я это назвал app.use('/api', authHeader, y)

3. Я не вижу здесь ничего, что указывало бы на то, что вы отправляете тело перед заголовком. Таким образом, это, по крайней мере, предполагает, что .. возможно y , это нормально, но есть что-то еще, что отправляет тело до того, как заголовки могут быть отправлены.

4. имеет ли значение, что secretManager.awsSecretManger это асинхронная функция?