記一次http-proxy-middleware的錯誤使用

最近新接了一個項目歪今,需要在啟動時選擇代理到不同的后端地址株婴,我就想到用 inquirer 做命令選擇

  • inquirer 引用代碼
// inquirer 版本 5.2.0
function ask() {
  var proxys = require('./serverProvider')
  return inquirer.prompt([
    {name: 'prefix', type: 'input', message: '請輸入prefix(如果有)'},
    {name: 'target', type: 'list', message: '請選擇代理的地址', choices: Object.values(proxys)}
  ])
    .then(answers => {
      app.use(proxyMiddleware(answers['prefix'], {
        target: answers['target'],
        changeOrigin: true
      }))
      resolve()
    })
    .catch(e => {
      reject(e)
    })
}
  • serverProvider 文件
module.exports = {
  provider1: '172.27.49.11:8081', // 小明
  provider2: '172.27.49.10:8081', // 小紅
}

執(zhí)行 npm run dev 后揖铜,報錯:

WX20180425-162106@2x.png

解決問題

  1. 看到所屬包是 requires-port , 調(diào)用該包的庫是 http-proxy-middleware, 看到該包版本為0.17.3柏肪,就想著是不是版本太低的 bug姐刁,逐使用 npm update | grep http-proxy-middleware,發(fā)現(xiàn)最新也就0.17.4烦味,基本可排除版本問題聂使。
  2. 那就看該庫哪里報錯吧,根據(jù)提示找到node_models/requires-port/index.js 13行
module.exports = function required(port, protocol) {
  protocol = protocol.split(':')[0];
  ...
}

可以看到是傳進(jìn)來的protocol為空谬俄,所以執(zhí)行 split 操作時報錯(其實(shí)細(xì)心點(diǎn)這時已經(jīng)可以知道錯誤在哪了)
然后在node_models全局搜'requires-port'(或者看報錯第二行)柏靶,定位到node_models/http-proxy/lib/http-proxy/common.js 109行

if (options.changeOrigin) {
    outgoing.headers.host =
      required(outgoing.port, options[forward || 'target'].protocol) && !hasPort(outgoing.host)
        ? outgoing.host + ':' + outgoing.port
        : outgoing.host;
  }

是options[forward || 'target'].protocol為undefined,所以導(dǎo)致調(diào)用 requires-port 出錯溃论,打印出 options 后發(fā)現(xiàn)是 target: xxxx屎蜓,是個 String 類型,之后將這個改為含有protocol的對象就正常執(zhí)行了钥勋。

后續(xù)

發(fā)現(xiàn)之前項目也是target為String的炬转,但沒有報錯,對比后發(fā)現(xiàn)原來是寫的后端地址沒有寫上協(xié)議(心酸~~)算灸,補(bǔ)充后String類型也是可以的扼劈。

還有一個關(guān)于inquirer的補(bǔ)充吧,因?yàn)楹蠖说刂番F(xiàn)在是對象的形式菲驴,只能獲取value荐吵,但不能在選擇的時候就與是哪個同事的地址匹配,所以改成Map形式

// 更改后的serverProvider
const map = new Map()
map.set('小明', '172.27.49.11:8081')
map.set('小紅', '172.27.49.10:8081')

// TODO 可以做成一個類赊瞬,添加validate方法校驗(yàn)
module.exports = Array.from(map)
// 修改引用代碼
function ask() {
  var proxys = require('./serverProvider')
  return inquirer.prompt([
    {name: 'prefix', type: 'input', message: '請輸入prefix(如果有)'},
    {name: 'target', type: 'list', message: '請選擇代理的地址', choices: proxys.map(it => String(it))}
  ])
    .then(answers => {
      app.use(proxyMiddleware(answers['prefix'], {
        target: answers['target'].split(',')[1],
        changeOrigin: true
      }))
    })

}

總結(jié)

這個錯誤其實(shí)是一個低級錯誤先煎,不應(yīng)該犯的,將這篇文章寫出來是為了分享我的問題解決方式森逮,如有哪些地方可以改進(jìn)的也可以留下評論榨婆。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末磁携,一起剝皮案震驚了整個濱河市褒侧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谊迄,老刑警劉巖闷供,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異统诺,居然都是意外死亡歪脏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門粮呢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來婿失,“玉大人钞艇,你說我怎么就攤上這事『拦瑁” “怎么了哩照?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長懒浮。 經(jīng)常有香客問我飘弧,道長,這世上最難降的妖魔是什么砚著? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任次伶,我火速辦了婚禮,結(jié)果婚禮上稽穆,老公的妹妹穿的比我還像新娘冠王。我一直安慰自己,他們只是感情好舌镶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布版确。 她就那樣靜靜地躺著,像睡著了一般乎折。 火紅的嫁衣襯著肌膚如雪绒疗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天骂澄,我揣著相機(jī)與錄音吓蘑,去河邊找鬼。 笑死坟冲,一個胖子當(dāng)著我的面吹牛磨镶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播健提,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼琳猫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了私痹?” 一聲冷哼從身側(cè)響起脐嫂,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎紊遵,沒想到半個月后账千,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡暗膜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年匀奏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片学搜。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡娃善,死狀恐怖论衍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情聚磺,我是刑警寧澤饲齐,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站咧最,受9級特大地震影響捂人,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜矢沿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一滥搭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捣鲸,春花似錦瑟匆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至外厂,卻和暖如春冕象,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背汁蝶。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工渐扮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人掖棉。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓墓律,卻偏偏與公主長得像,于是被迫代替她去往敵國和親幔亥。 傳聞我的和親對象是個殘疾皇子耻讽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 我用前半生尋找 用后半身追隨 只為伴著你的芳容 我追逐你, 我依戀你帕棉, 但我就是不能霸占你 我痛恨针肥, 我蔑視 甚至...
    燚陽閱讀 319評論 0 4
  • 流沙 文/蘭蘭 愛 風(fēng)干了它的滋潤 留在心 似干涸的沙 愛如沙 滄桑了冷漠 何不如放開 它的自由 緊緊握住 卻很...
    蘭如純閱讀 431評論 2 0
  • 看了一個視頻,演說家的一個現(xiàn)場笤昨,在現(xiàn)場觀眾和幾位導(dǎo)師的熱烈掌聲中祖驱、點(diǎn)頭贊許中、無可挑剔的演講呈現(xiàn)中瞒窒,我質(zhì)疑: 家庭...
    鼓搗貓閱讀 193評論 0 0