2017-09-13 126 views
0

下面是我的代码为什么req.body在“proxyRes”

import { createProxyServer } from 'http-proxy'; 
import BodyParser from 'body-parser'; 

const jsonParser = BodyParser.json(); 
const proxy = createProxyServer({ 
    target: 'http://127.0.0.1:7800', 
    proxyTimeout: 1000, 
}); 

app.use('/api', (req, res) => { 
    proxy.web(req, res); 
}); 

proxy.on('proxyRes', (proxyRes, req, res) => { 

    proxyRes.on('data', (dataBuffer) => { 
    console.log('req.body ', req.body); 
    const data = dataBuffer.toString('utf8'); 
    console.log(data); 
    }); 

}); 

我越来越req.body为未定义

如果我在app.post(..)使用中间件jsonParser那么这个路线挂起,我得到了一个未定义前端超时错误。代码如下。

app.use('/api', jsonParser, (req, res) => { 
    proxy.web(req, res); 
}); 

我要让响应&请求日志时res.statusCode !== 200

+0

请修正你的代码的一些东西,让我们知道,如果这个问题继续下去。首先删除额外的'}'导致语法错误。也删除重复的行'const jsonParser = BodyParser.json();' 'target'选项需要知道它的协议,所以试试:'http://127.0.0.1:7800' 即使这工作正常,您的代码是在req.body不存在的情况下 –

+0

@DanielAristizabal谢谢,我已经做了语法修复。 –

回答

0

经过一番清理代码(除去}多余的,删除重复的行)我能得到一些可运行的代码,不知道这是你正在寻找的。我希望这个帮助。

const proxy = createProxyServer({ 
    target: 'http://127.0.0.1:7800', 
    proxyTimeout: 1000, 
}); 

app.use(BodyParser()) 

app.use('/api', (req, res) => { 
    proxy.on('proxyRes', (proxyRes) => { 
    proxyRes.on('data', (dataBuffer) => { 
     console.log('req.body ', req.body); 
     const data = dataBuffer.toString('utf8'); 
     console.log(data); 
    }); 
    }); 
    proxy.web(req, res); 
}); 
+0

感谢丹尼尔,但上面的代码给出了相同的输出(未定义)和app.use(BodyParse())实际挂起路由 - 所有apis在前端得到超时 –

+0

我想这个问题可能是版本mismatch。检查express与正文解析插件之间的版本兼容性,挂起是由于不在中间件链中调用next()引起的。仔细检查正文解析插件的文档可能应该以不同的方式调用它。如果POST数据到/ api应显示在'req.body'上,并且代理响应显示在'data'上。 –