У меня есть экспресс-сервер, на котором, похоже, есть какое-то промежуточное ПО, вызывающее периодическую ошибку.Ошибка выглядит следующим образом:
Ошибка [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 и / или отладка этой проблемы будет полезна.