Vaadin-Upload无法与http-proxy-middleware一起使用

时间:2019-03-05 10:52:55

标签: node.js http-proxy-middleware vaadin-upload

我有一个node.js / Polymer 1网站。我正在使用HTTP-proxy-middleware将api调用(/ api / webapi)路由到我的后端API服务器。

在其中一页上,我有一个vaadin-upload(v2.3.0)组件,可将文件发送到api。在本地主机上运行时,一切似乎工作正常,但是当我部署到测试服务器时,遇到了问题。上传要么快速完成,然后长时间处于“处理”状态,要么停滞不前。

使用邮递员,我设法将文件直接发送到API,然后发送到代理服务器。我还设法获得了上载组件以直接调用API。所有这些情况都可以正常工作,并且API的输出将在所有情况下建议API以相同的速率接收/处理数据。由此,我将其范围缩小到Vaadin-Upload和http-proxy-middleware之间的交互。

有人有经验,可以帮助我正确配置代理吗。

代理配置:

const url = require('url');
var hpmproxy = require('http-proxy-middleware');
var config = require('../config');

// Adds user authorization token from passport to request
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();

    res.status(403).end();
};

function restream(proxyReq, req) {
    if (isMultipartRequest(req))
        console.log('Multipart');
    if (!isEmpty(req.body)) {
        console.log("parse");
        var bodyData = JSON.stringify(req.body);
        proxyReq.setHeader('Content-Type', 'application/json');
        proxyReq.setHeader('Content-Length', Buffer.byteLength(bodyData));
        proxyReq.write(bodyData);
    }
    console.log("-->[proxyReq]----", proxyReq.path, proxyReq.getHeader('Content-Type'));

};

function handleResponse(proxyRes, req, res) {
  console.log('---[proxyRes]<---', proxyRes.req.method, proxyRes.req.path, proxyRes.statusCode);
};

function isMultipartRequest(req) {
  let contentTypeHeader = req.headers['content-type'];
  return contentTypeHeader && contentTypeHeader.indexOf('multipart') > -1;
};

function isEmpty(obj) {
    for(var prop in obj) {
        if(obj.hasOwnProperty(prop))
            return false;
    }
    return JSON.stringify(obj) === JSON.stringify({});
}
var options = {
    target: config.webApiHost,

    changeOrigin: true, // needed for virtual hosted sites
    pathRewrite: {
        '^/api/webapi/': config.webApiPath
    },
    secure: !config.selfSigned,
    onProxyRes: handleResponse,
    onProxyReq: restream
   // ,logLevel: 'debug'


};

var hpmApiProxy = hpmproxy(options);

module.exports = function (app, passport, config) {
    app.use('/api/webapi/', isLoggedIn, addAuthTokenMiddleware, hpmApiProxy);
    console.log(' WebAPI Proxy Loaded');
}

0 个答案:

没有答案
相关问题