Nodejs代理不会流式传输POST数据

我有一个Polymer网站,目前托管在OpenResty / Nginx下。我正在尝试将其迁移到使用Nodejs Express,以使用Passportjs进行身份验证(SAML)

我已配置http-express-proxy来处理我的API调用(/ api / webapi / \ *)。此代理添加了一个承载人令牌到请求中以进行身份验证。该API是ASP.net恢复Web服务。

大多数调用都有效,除了我的vaadin-upload请求。在那里我遇到了“MIME多重流的意外结束”错误。

代理配置

const url = require('url');
const exproxy = require('express-http-proxy');

// 从护照中添加用户授权令牌以请求
var addAuthTokenMiddleware = function (req, res, next) {
    if (req.session && req.isAuthenticated()) {
        req.headers['Authorization'] = 'Bearer ' + req.user.token;
        next();
    } else {
       req.abort();
    }
};

function isLoggedIn(req, res, next) {
    // if user is authenticated in the session, carry on
    if (req.session && req.isAuthenticated())
        return next();

    // if they aren't redirect them to the home page
    res.redirect('/login');
};

// 新主机名+路径,如问题指定:
const apiProxy = exproxy('http://127.0.0.1', {
    forwardPath: req => url.parse(req.originalUrl).path.replace("/api/webapi/",'/api/DataAccess.svc/api/v1/'),
    parseReqBody: false,
    preserveHostHdr: true
});

module.exports = function(app, passport) {
    app.use ('/api/webapi/*', isLoggedIn, addAuthTokenMiddleware, apiProxy);
    console.log(' Proxy Loaded');

}

非常感谢您的帮助

谢谢 迈克

点赞
用户9360521
用户9360521

我使用 http-proxy-middleware 来缓解这个问题。

var hpmproxy = require('http-proxy-middleware');
function restream(proxyReq, req) {
    if (!isEmpty(req.body)) {

        var bodyData = JSON.stringify(req.body);
        proxyReq.setHeader('Content-Type', 'application/json');
        proxyReq.setHeader('Content-Length', Buffer.byteLength(bodyData));
        proxyReq.write(bodyData);
    }
};
var options = {
    target: config.webApiHost,

    changeOrigin: true, // needed for virtual hosted sites
    pathRewrite: {
        '^/api/webapi': config.webApiPath
    },
    secure: !config.selfSigned,
    onProxyReq: restream
};
var hpmApiProxy = hpmproxy(options);
app.use('/api/webapi/', isLoggedIn, addAuthTokenMiddleware, hpmApiProxy);
2018-10-01 06:46:12