Периодическая попытка установить заголовки после их отправки клиенту - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть экспресс-сервер, на котором, похоже, есть какое-то промежуточное ПО, вызывающее периодическую ошибку.Ошибка выглядит следующим образом:

Ошибка [ERR_HTTP_HEADERS_SENT]: Невозможно установить заголовки после их отправки клиенту в ServerResponse.setHeader (_http_outgoing.js: 469: 11) в ServerResponse.writeHead (_http_ser).js: 231: 21) в Object.handler (/Users/42shadow42/automation_security/node_modules/webpack-hot-middleware/middleware.js:77:11) в промежуточном программном обеспечении (/ Users / 42shadow42 / automatic_security / node_modules / webpack-hot-middleware / middleware.js: 34: 17) в /Users/42shadow42/automation_security/node_modules/next/dist/server/hot-reloader.js:292:29 в новом Promise () в новом F (/ Users / 42shadow42 / Automation_security)/node_modules/core-js/library/modules/_export.js:36:28) в _loop $ (/Users/42shadow42/automation_security/node_modules/next/dist/server/hot-reloader.js:291:34) в tryCatch(/Users/42shadow42/automation_security/node_modules/regenerator-runtime/runtime.js:62:40) в Generator.invoke [как _invoke] (/Users/42shadow42/automation_security/node_modules/regenerator-runtime/runtime.js:288:22) в Generator.prototype. (Анонимная функция) [как далее] (/Users/42shadow42/automation_security/node_modules/regenerator-runtime/runtime.js:114:21) в tryCatch (/ Users / 42shadow42 / automa_security / node_modules / Регенератор-runtime / runtime.js: 62: 40) в MaybeInvokeDelegate (/Users/42shadow42/automation_security/node_modules/regenerator-runtime/runtime.js:350:18) в Generator.invoke [как _invoke] (/ Users / 42shadow42 / automatic_security)/node_modules/regenerator-runtime/runtime.js:262:32) в Generator.prototype. (анонимная функция) [как следующий] (/Users/42shadow42/automation_security/node_modules/regenerator-runtime/runtime.js:114:21)в asyncGeneratorStep (/Users/42shadow42/automation_security/node_modules/@babel/runtime-corejs2/helpers/asyncToGenerator.js:5:24) в _next (/ Users / 42shadow42 / Automation_Security / node_modules / @ babel / runtime-run-time-runtime-runtimeasyncToGenerator.js: 27: 9)

import next from "next";
import path from "path";
import express from "express";
import compression from "compression";
import helmet from "helmet";
import cookieParser from 'cookie-parser';
import bodyParser from 'body-parser';

import oauth from '@lds/express-oauth2';

import authConfig from './config/oauth';
import auth from './helpers/auth';
import * as dotenv from "./utils/dotenv";

const dev = process.env.NODE_ENV !== "production";
const app = next({ dir: path.join(__dirname, "..", "app"), dev });
const handle = app.getRequestHandler();

app.prepare().then(() => {
  const server = express();

  server.use(cookieParser());

  server.use(bodyParser.json({limit: '50mb'}))

  server.use(oauth(authConfig));

  !dev && server.use(compression()); // https://github.com/zeit/next.js/issues/3890
  server.use(helmet());

  server.get('/user', auth.isAuthorized("security", "security_app_access"), async function (req, res) {
    res.status(200).send(JSON.stringify({
      pn: req.user.preferredName,
      ldsaccountid: req.user.ldsAccountId,
      role: await auth.getUserRoles(req.cookies.OAUTH_access_token)
    }))
  });

  server.use("/dredge", require('./dredge/routes'));
  server.use("/discovery", require('./discovery/routes'));

  server.get("*", auth.isAuthorized("security", "security_app_access"), (req, res) => {
    return handle(req, res);
  });

  // eslint-disable-next-line no-unused-vars
  server.use((err, req, res, next) => {
    // eslint-disable-next-line no-console
    console.error(err);
    res
      .status(err.status || 500)
      .send(req.xhr ? { error: "An error occured" } : "An error occured");
  });

  server.listen(3000, err => {
    if (err) throw err;
    // eslint-disable-next-line no-console
    console.log(`Listening at Port 3000 (${process.env.APP_BASE_URL})`);
  });
});

Любые идеи о том, какая часть промежуточного программного обеспечения может взаимодействовать с заголовками или как воспроизводитьe и / или отладка этой проблемы будет полезна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...