首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >/node_modules/http-proxy/lib/http-proxy/index.js:120;错误:套接字挂起

/node_modules/http-proxy/lib/http-proxy/index.js:120;错误:套接字挂起
EN

Stack Overflow用户
提问于 2020-04-03 19:48:00
回答 1查看 776关注 0票数 1

我在我试图运行的一个容器中运行expressJS -compose;当我继续按CMD+R刷新登陆页面(可能3~4秒)时,它写着“错误:套接字挂起”和“坏掉”。这是错误

代码语言:javascript
复制
saml-enabled-reverse-proxy_1  | /node_modules/http-proxy/lib/http-proxy/index.js:120
saml-enabled-reverse-proxy_1  |     throw err;
saml-enabled-reverse-proxy_1  |     ^
saml-enabled-reverse-proxy_1  | 
saml-enabled-reverse-proxy_1  | Error: socket hang up
saml-enabled-reverse-proxy_1  |     at connResetException (internal/errors.js:561:14)
saml-enabled-reverse-proxy_1  |     at Socket.socketCloseListener (_http_client.js:380:25)
saml-enabled-reverse-proxy_1  |     at Socket.emit (events.js:214:15)
saml-enabled-reverse-proxy_1  |     at TCP.<anonymous> (net.js:658:12) {
saml-enabled-reverse-proxy_1  |   code: 'ECONNRESET'
saml-enabled-reverse-proxy_1  | }

,我花了30多个小时在这个问题上,但仍然不知道这个有什么问题.?

这是源代码

代码语言:javascript
复制
var express = require("express");
var session = require('express-session');
var cookieParser = require('cookie-parser');
var httpProxy = require('http-proxy');
var fs = require('fs');
var saml = require('passport-saml');
var passport = require('passport');

// ServiceProvider will be the load balancer.
let serviceProvider = 'http://opengrok_docker:8080';
let entryPoint = null;
let hackMode = false;
if (process.env.MODE=='TEST') {
  entryPoint = 'http://localhost:8080/x'
} else if (process.env.MODE=='STAGE') {
  entryPoint = 'xxx'
} else if (process.env.MODE=='PROD') {
  entryPoint = 'xxx'
}

// SAML config options here
var samlStrategy = new saml.Strategy({
    entryPoint: entryPoint,
    issuer: 'urn:opengrok',
    identifierFormat: null,
    decryptionPvk: privateKey, //.key version
    validateInResponseTo: false,
    disableRequestedAuthnContext: false,
}, function(profile, done) {
    return done(null, profile);
});

// Passport Middleware Block
passport.serializeUser(function(user, done) {
    done(null, user);
});

passport.deserializeUser(function(user, done) {
    done(null, user);
});
passport.use('samlStrategy', samlStrategy);

let app = express();
let apiProxy = httpProxy.createProxyServer();
app.get('/', <<<<<----- REFRESHING THIS PAGE over seconds got me error;
    function(req, res) {
        apiProxy.web(req, res, {target: serviceProvider});
    }
);

app.use(session({secret: 'secret', resave: false, saveUninitialized: true}));
app.use(passport.initialize());
app.use(passport.session());
// Static blocks
app.use('/img', express.static(__dirname + '/img'));
app.use('/fonts', express.static(__dirname + '/fonts'));
app.use('/js', express.static(__dirname + '/js'));
app.use('/css', express.static(__dirname + '/css'));
app.use('/font-awesome', express.static(__dirname + '/font-awesome'));
app.use('/source/default/img', express.static(__dirname + '/source/default/img'));
app.use('/source/default', express.static(__dirname + '/source/default'));
app.use('/source/js', express.static(__dirname + '/source/js'));
app.use('/source/api/v1/suggest/config', express.static(__dirname + '/source/config'))

// Serve the app on port 443
var server = app.listen(443, function () {
    console.log('Listening on port %d', server.address().port)
});

码头工人

代码语言:javascript
复制
FROM node:12.10.0

COPY package.json .

RUN npm install

COPY . .
CMD [ "node", "--max-old-space-size=8192", "--trace_gc", "src/index.js" ]

package.json

代码语言:javascript
复制
{
  "name": "aop-sp",
  "version": "1.0.0",
  "description": "Art of Possible Service Provider",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "xxx",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.19.0",
    "connect-ensure-login": "^0.1.1",
    "cookie-parser": "^1.4.4",
    "express": "^4.17.1",
    "express-session": "^1.16.2",
    "http-proxy": "^1.0.0",
    "passport": "^0.4.0",
    "passport-saml": "^1.1.0"
  },
  "devDependencies": {
    "http-proxy-middleware": "^0.20.0"
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-03 20:58:55

我在您的代码中看到的一个问题是,对/的请求将被代理,但整个中间件链仍将被执行。这可能不是您想要的,也可能是在代理请求完成处理之前终止tcp连接的原因。

我建议在使用express时使用http-proxy-middleware而不是http-proxy,因为它作为快速中间件很容易集成:

代码语言:javascript
复制
 const {createProxyMiddleware} = require('http-proxy-middleware');
 ...
 app.get('/', createProxyMiddleware({ target: serviceProvider}));
 ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61019402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档