一個引號引發的血案

在使用 socket.io 時遇到一個看似很大的問題,花了兩個小時發現是一個引號引發的血案。并不是什么技術難題,但是這次解決問題的過程給我了很大的感悟。

遇到問題要先分析其原因,弄清楚其本質。不要光想著尋求幫助,例如搜索之類的手段。log 信息中其實包含了重要的線索,不要忽視。

有句話是這么說的:遇到問題不要老是認為是機器、環境的鍋,回頭看看,多半都是自己寫的程序有錯。

問題很簡單,我在根據 socket.io api 簡單引入

import io from 'socket.io-client'

只是簡單的引入,沒有任何其他的代碼。報錯:


Uncaught SyntaxError: Unexpected token :

    at Object../node_modules/socket.io-client/node_modules/debug/src/browser.js (app.js:4627)

    at __webpack_require__ (app.js:679)

    at fn (app.js:89)

    at Object.eval (url.js?5759:7)

    at eval (url.js:77)

    at Object../node_modules/socket.io-client/lib/url.js (app.js:4620)

    at __webpack_require__ (app.js:679)

    at fn (app.js:89)

    at eval (index.js?0e64:6)

    at Object../node_modules/socket.io-client/lib/index.js (app.js:4592)

粗略一看,語法錯誤,冒號的鍋。好,那么解決吧。怎么解決呢,看文檔噻,去搜索噻。花了大量的時間去查文檔,搜索,并沒有用?;剡^頭來自己仔細琢磨一下。

首先,語法錯誤,看看哪里報的錯呢?/node_modules/socket.io-client/node_modules/debug/src/browser.js (app.js:4627)

瀏覽器里看看源碼吧。

image.png

就是這里,不認真看,不認真想,以為是環境變量的問題。又朝著環境變量的方向一頓查,不思考,就是去搜索,去找原因??墒窃蛟谀睦铮驮诖a里面啊。

早就知道是冒號的鍋,冒號在哪里?冒號就在這里啊,http 后面的這個冒號啊。去模塊的源碼里看看,源碼是這樣子的:


// If debug isn't set in LS, and we're in Electron, try to load $DEBUG

  if (!r && typeof process !== 'undefined' && 'env' in process) {

    r = process.env.DEBUG;

  }

再對比一下,process.env就是一個對象,需要去取 DEBUG 這個環境變量嘛。源碼里也寫的清清楚楚是 Object 的,那么在 URL_PREFIX 應該是一個字符串啊。這里一看就不對啊,沒有引號啊。

再去看 URL_PREFIX 在哪里定義的,這個其實不陌生啊,項目里 /config/prod.env.js 里


'use strict'

module.exports = {

  NODE_ENV: '"production"',

  URL_PREFIX: '[http://192.168.43.193:3000/'](http://192.168.43.193:3000/')

}

對比一下NODE_ENV發現問題了,應該是雙重引號啊。改一下


module.exports = {

 URL_PREFIX: '"[http://192.168.43.193:3000/"'](http://192.168.43.193:3000/')

}

重新 start 一下,這不是沒毛病嘛。

總結一下,就像文章開始說的,根據log 信息,仔細想一下這個問題并不難的。難的就在自己把問題想復雜了,而且不思考。反思……

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測試 ...
    KeKeMars閱讀 6,396評論 0 6
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,924評論 18 139
  • 文|南方好姑娘 -1- 我們馬不停蹄地向前,卻從不曾停下來看看自己。 時間日復一日,年復一年地在走,走到2017年...
    桔里閱讀 527評論 5 8
  • 搬的不是家,搬的是我情感的寄托和安放地。自從孩子爸走后,一個人帶著娃,風里來雨里去,感覺是個女漢子。和你異地一年多...
    繽紛生活創作者閱讀 159評論 0 0
  • 我愛幻想愛空談愛吹噓的毛病,滅金先生看得透。一日我大談:“云南的發展好啊,因為***此處省略700字***,在未來...
    震西方閱讀 256評論 0 1