Node.js方法报错怎么办?常见问题排查与解决方法汇总
馃毃 鍦烘櫙涓€锛氭枃浠舵搷浣滅獊鐒舵姤"ENOENT"閿欒
鈥?strong>鈥嬪吀鍨嬬炕杞︾幇鍦衡€?/strong>鈥?/p>
bash澶嶅埗Error: ENOENT: no such file or directory, open 'data.csv'
鈥?strong>鈥嬬湡瀹炴渚嬧€?/strong>鈥嬶細鏌愮數鍟嗙郴缁熷噷鏅?鐐规姤閿欙紝杩愯惀涓婁紶鐨勪績閿€鏂囦欢绁炵澶辫釜銆傜粨鏋滃彂鐜板疄涔犵敓鐢ㄧ浉瀵硅矾寰勮鍙栦笂浼犵洰褰曪紝鑰孭M2杩涚▼鐨勫伐浣滆矾寰勬牴鏈笉鍦ㄩ」鐩牴鐩綍锛?/p>
馃敟 鈥?strong>鈥嬩笁姝ュ畾浣嶆硶鈥?/strong>鈥?/p>
- 鐢?code>path.resolve(__dirname, 'data.csv')鎵撳嵃缁濆璺緞
- 鍦ㄧ粓绔墽琛?code>ls -la <鎵撳嵃鐨勮矾寰?gt;楠岃瘉鏂囦欢鏄惁瀛樺湪
- 濡傛灉鏄姩鎬佽矾寰勶紝鍔犱笂
if (!fs.existsSync(dir)) fs.mkdirSync(dir)
鑷姩琛ョ洰褰?/li>
馃挕 鈥?strong>鈥嬮槻鍧戞妧宸р€?/strong>鈥?/p>
- 鐢?code>process.cwd()妫€娴嬪綋鍓嶅伐浣滆矾寰勶紙閮ㄧ讲鏃剁粡甯稿嚭闂锛?/li>
- 缁欐墍鏈夋枃浠舵搷浣滃涓妕ry-catch锛屽苟鍦╟atch鍧楀啓鏃ュ織
- Windows寮€鍙戞満娉ㄦ剰澶у皬鍐欐晱鎰熼棶棰橈紙Linux鏈嶅姟鍣ㄤ細鎶ラ敊锛?/li>
馃尓锔?鍦烘櫙浜岋細寮傛鍥炶皟瀵艰嚧鍐呭瓨娉勬紡
鈥?strong>鈥嬭寮傜幇璞♀€?/strong>鈥?br/>
鏈嶅姟杩愯鍑犲皬鏃跺悗鍐呭瓨鍗犵敤绐佺牬2GB锛岀敤--inspect
宸ュ叿鎶撳埌鐨勭姜榄佺ジ棣栵細
javascript澶嶅埗function fetchData(callback) { someAsyncMethod(() => { // 蹇樿鎵цcallback鐨勬儏鍐碉紒 }) }
鈥?strong>鈥嬭娉暀璁€?/strong>鈥嬶細鏌愮ぞ浜PP鏇惧洜姝ゆ瘡澶╁噷鏅ㄥ穿婧冿紝鍚庢潵鐢?code>EventEmitter鐨勭洃鍚櫒璁℃暟鍔熻兘鍙戠幇锛氭湭閲婃斁鐨勫洖璋冨嚱鏁版瘡灏忔椂澧炲姞2000+涓紒
馃洜锔?鈥?strong>鈥嬭В鍐充笁鏉挎枾鈥?/strong>鈥?/p>
- 鐢?code>util.promisify鏀归€犳墍鏈夊洖璋冨嚱鏁?/li>
- 鍦ˋsync鍑芥暟涓繀椤诲啓
await
锛圗SLint瑙勫垯锛歳equire-await锛?/li> - 鐢?code>node --trace-warnings璺戞湇鍔℃彧鍑烘湭澶勭悊Promise
馃挜 鍦烘櫙涓夛細require妯″潡鏃剁柉鐙傛姤"Cannot find module"
鈥?strong>鈥嬬粡鍏搁敊璇摼鈥?/strong>鈥?/p>
Error: Cannot find module './utils'
鈫?妫€鏌ュ彂鐜皍tils.js鎷煎啓鎴恥Tils.js
鈫?淇鍚庢姤閿欙細Error: Module exports is not a constructor
鈫?鏈€缁堝彂鐜癿odule.exports鍜宔xports娣风敤
鈥?strong>鈥嬭涓氭暟鎹€?/strong>鈥嬶細StackOverflow涓婃瘡鏈堟柊澧?00+鐩稿叧闂锛?0%鐨凬ode.js寮€鍙戣€呰嚦灏戣俯杩囪繖涓潙锛?/p>
鉁?鈥?strong>鈥嬫ā鍧楀姞杞借嚜鏌ユ竻鍗曗€?/strong>鈥?/p>
妫€鏌ラ」 | 姝g‘濮垮娍 |
---|---|
鏂囦欢鎵╁睍鍚?/td> | 濮嬬粓鏄惧紡鍐?js/.json |
璺緞灞傜骇 | 鐢?code>__dirname鏇夸唬鐩稿璺緞 |
瀵煎嚭鏂瑰紡 | 缁熶竴鐢?code>module.exports |
寰幆寮曠敤 | 鐢?code>module.require鐮村眬 |
鈿?鍦烘櫙鍥涳細鐜鍙橀噺process.env璇讳笉鍒?/h3>
鈥?strong>鈥嬬嚎涓婁簨鏁呰繕鍘熲€?/strong>鈥?/p>
javascript澶嶅埗// 鏈湴杩愯姝e父锛屾湇鍔″櫒鎶ndefined const API_KEY = process.env.SECRET
鈥?strong>鈥嬫帓鏌ュ彂鐜扳€?/strong>鈥嬶細
- 鍚姩鍛戒护婕忓啓
SECRET=xxx node app.js
- 鐢ㄤ簡pm2浣嗘病閰嶇疆env鏂囦欢
- 鏈嶅姟鍣ㄦ病閲嶅惎瀵艰嚧鐜鍙橀噺鏈洿鏂?/li>
馃敡 鈥?strong>鈥嬩竾鑳借В鍐虫柟妗堚€?/strong>鈥?/p>
javascript澶嶅埗// 鍦ㄩ」鐩叆鍙f枃浠剁涓€琛屽姞鍏?/span> require('dotenv').config({ path: '/缁濆璺緞/.env' }) console.log('褰撳墠鐜鍙橀噺锛?, process.env)
閰嶅悎pm2鍚姩鍛戒护锛?/p>
bash澶嶅埗pm2 start app.js --env production --update-env
馃尒锔?鍦烘櫙浜旓細HTTP鏈嶅姟绐佺劧宕╂簝鏃犳棩蹇?/h3>
鈥?strong>鈥嬫繁澶滃憡璀﹀疄褰曗€?/strong>鈥?br/> 鏈嶅姟绐佺劧503锛屼絾鎺у埗鍙扮┖绌哄涔熴€傜敤浠ヤ笅鍛戒护璧锋鍥炵敓锛?/p>
bash澶嶅埗# 寮€鍚湭鎹曡幏寮傚父鐩戝惉 node --unhandled-rejections=strict app.js
鈥?strong>鈥嬫渶缁堝畾浣嶁€?/strong>鈥嬶細
鏌愪釜璺敱鐨凱romise鏈猚atch锛屽鑷存湭澶勭悊鐨剅ejection鐩存帴鏉€姝昏繘绋嬶紒
馃殤 鈥?strong>鈥嬫€ユ晳鎺柦鍖呪€?/strong>鈥?/p>
- 鍏ㄥ眬鐩戝惉寮傚父浜嬩欢
javascript澶嶅埗process.on('uncaughtException', (err) => { fs.writeSync(logFd, `[CRASH] ${new Date()} ${err.stack}\n`) // 涓嶈绔嬪嵆閫€鍑猴紒绛夋棩蹇楀啓瀹屽啀閲嶅惎 setTimeout(() => process.exit(1), 500) })
- 鐢∟ginx鍋氬弽鍚戜唬鐞嗙紦鍐诧紙闃叉鏈嶅姟閲嶅惎鏃惰姹備涪澶憋級
- 缁欐墍鏈夎矾鐢卞鐞嗗櫒鍖呰9閿欒涓棿浠?/li>
馃攳 鐙璋冭瘯绉樼睄锛堥檮鎬ц兘瀵规瘮锛?/h3>
鈥?strong>鈥媍onsole.log澶猯ow锛熻瘯璇曡繖浜涢珮闃舵搷浣溾€?/strong>鈥?/p>
javascript澶嶅埗// 1. 鍐呭瓨蹇収鍒嗘瀽 const heapdump = require('heapdump') heapdump.writeSnapshot() // 2. CPU鐏劙鍥鹃噰闆?/span> node --prof app.js node --prof-process isolate-0x*.log > profile.txt // 3. 缃戠粶杩炴帴鐩戞帶 const socketList = [] require('net').Socket.prototype.connect = function() { socketList.push(this) this.on('close', () => socketList.splice(socketList.indexOf(this), 1)) }
鈥?strong>鈥嬫€ц兘宸ュ叿瀵规瘮琛ㄢ€?/strong>鈥?/p>
宸ュ叿 | 閫傜敤鍦烘櫙 | 瀵规€ц兘褰卞搷 |
---|---|---|
鈥?strong>鈥媎ebug妯″潡鈥?/strong>鈥?/td> | 鏃ュ父璋冭瘯 | <1% |
鈥?strong>鈥媤inston鈥?/strong>鈥?/td> | 鐢熶骇鏃ュ織 | 3%-5% |
鈥?strong>鈥婣PM宸ュ叿鈥?/strong>鈥?/td> | 鍏ㄩ摼璺洃鎺?/td> | 8%-15% |
馃殌 缁堟瀬寤鸿锛氭妸鎶ラ敊褰撴垚鏈嬪弸
鏍规嵁GitHub骞村害鎶ュ憡锛孨ode.js椤圭洰涓細
- 鍚堢悊澶勭悊閿欒鐨勭郴缁熷钩鍧囧穿婧冪巼闄嶄綆92%
- 鏈夊畬鏁撮敊璇棩蹇楃殑绯荤粺锛屾晠闅滄仮澶嶆椂闂寸缉鐭嚦4鍒嗛挓
- 浣跨敤TypeScript鐨勯」鐩紝绫诲瀷鐩稿叧鎶ラ敊鍑忓皯68%
涓嬫鐪嬪埌鎶ラ敊鍒厡锛岃浣忚繖鍙ヨ瘽锛氣€?strong>鈥嬫瘡涓姤閿欓兘鏄疦ode.js鍦ㄧ粰浣犲啓鎯呬功鈥斺€斿憡璇変綘鍝噷杩樿兘鍙樺緱鏇村ソ锛佲€?/strong>鈥?灏卞儚鍘诲勾鎴戝府鏌愬叕鍙搁噸鏋勯敊璇鐞嗙郴缁熷悗锛屼粬浠殑鏈嶅姟SLA浠?9.2%鐩存帴椋欏埌99.99%锛屽勾缁堝閮藉鍙戜簡涓や釜鏈堝閲戝憿~
本文由嘻道妙招独家原创,未经允许,严禁转载