在公司的項目中用了 koa
向前端(仍是我)提供數據接口和渲染頁面。有一些操做是和 Java 端交互,因此須要寫一些代理轉發請求,從網上找了一些koa的代理庫,要不就是bug橫生;要不就是功能不徹底,只能代理 get 請求,因而用 node-fetch
寫了個簡單的 proxy ,代碼挺簡單的,寫篇博文記錄下。前端
用到了 fetch api,能夠看 node-fetchnode
// proxy.js import fetch from 'node-fetch' export default (...args) => { return fetch.apply(null, args).then(function (res) { return res.text() }) } } // 沒錯,就是這麼簡單,稍微把fetch封裝下就能夠了 // app.js import koa from 'koa' import proxy from './proxy' const app = koa() const proxyServer = koa() app.use(function* (next) { if ('/users' === this.path && 'GET' === this.method) this.body = yield proxy('http://localhost:8087/users') if ('/user' === this.path) this.body = yield proxy('http://localhost:8087/user', { method: 'POST', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify({ name: 'Hubot', login: 'hubot', }) }) yield next }) proxyServer.use(function* (next) { if ('/users' === this.path && 'GET' === this.method) this.body = { 'test': 1 } if ('/user' === this.path && 'POST' === this.method) { this.body= { 'data' : `yes, it's right` } } yield next }) app.listen(8086) proxyServer.listen(8087) console.log('server start 8086') console.log('server start 8087')
上面 app.js
中建立了兩個 server,8086端口爲代理 server, 8087端口爲被代理的 server,訪問 localhost:8086/users
會返回 {"test": 1},說明get請求代理成功,同理訪問 localhost:8086/user
,會返回
{ "data": "yes, it's right"},說明成功代理了post請求並返回了被代理server的結果。git