2017-09-13 121 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'上。 –