koa 利用 node-fetch 寫個本身的代理

在公司的項目中用了 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

相關文章
相關標籤/搜索