鈥嬪吀鍨嬬炕杞︾幇鍦衡€?/strong>鈥?/p>bash澶嶅埗Error:ENOENT:nosuchfileordirectory,open'data.csv'鈥?strong>鈥嬬湡瀹炴渚嬧€?/strong>鈥嬶細鏌愮數鍟嗙郴缁熷噷鏅?鐐规" />
  1. 主页 > 小妙招

Node.js方法报错怎么办?常见问题排查与解决方法汇总


馃毃 鍦烘櫙涓€锛氭枃浠舵搷浣滅獊鐒舵姤"ENOENT"閿欒

鈥?strong>鈥嬪吀鍨嬬炕杞︾幇鍦衡€?/strong>鈥?/p>

bash澶嶅埗
Error: ENOENT: no such file or directory, open 'data.csv'

鈥?strong>鈥嬬湡瀹炴渚嬧€?/strong>鈥嬶細鏌愮數鍟嗙郴缁熷噷鏅?鐐规姤閿欙紝杩愯惀涓婁紶鐨勪績閿€鏂囦欢绁炵澶辫釜銆傜粨鏋滃彂鐜板疄涔犵敓鐢ㄧ浉瀵硅矾寰勮鍙栦笂浼犵洰褰曪紝鑰孭M2杩涚▼鐨勫伐浣滆矾寰勬牴鏈笉鍦ㄩ」鐩牴鐩綍锛?/p>

馃敟 鈥?strong>鈥嬩笁姝ュ畾浣嶆硶鈥?/strong>鈥?/p>

  1. 鐢?code>path.resolve(__dirname, 'data.csv')鎵撳嵃缁濆璺緞
  2. 鍦ㄧ粓绔墽琛?code>ls -la <鎵撳嵃鐨勮矾寰?gt;楠岃瘉鏂囦欢鏄惁瀛樺湪
  3. 濡傛灉鏄姩鎬佽矾寰勶紝鍔犱笂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>

  1. 鐢?code>util.promisify鏀归€犳墍鏈夊洖璋冨嚱鏁?/li>
  2. 鍦ˋsync鍑芥暟涓繀椤诲啓await锛圗SLint瑙勫垯锛歳equire-await锛?/li>
  3. 鐢?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>鈥嬶細

  1. 鍚姩鍛戒护婕忓啓SECRET=xxx node app.js
  2. 鐢ㄤ簡pm2浣嗘病閰嶇疆env鏂囦欢
  3. 鏈嶅姟鍣ㄦ病閲嶅惎瀵艰嚧鐜鍙橀噺鏈洿鏂?/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>

  1. 鍏ㄥ眬鐩戝惉寮傚父浜嬩欢
javascript澶嶅埗
process.on('uncaughtException', (err) => {
  fs.writeSync(logFd, `[CRASH] ${new Date()} ${err.stack}\n`)
  // 涓嶈绔嬪嵆閫€鍑猴紒绛夋棩蹇楀啓瀹屽啀閲嶅惎
  setTimeout(() => process.exit(1), 500)
})
  1. 鐢∟ginx鍋氬弽鍚戜唬鐞嗙紦鍐诧紙闃叉鏈嶅姟閲嶅惎鏃惰姹備涪澶憋級
  2. 缁欐墍鏈夎矾鐢卞鐞嗗櫒鍖呰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%锛屽勾缁堝閮藉鍙戜簡涓や釜鏈堝閲戝憿~

本文由嘻道妙招独家原创,未经允许,严禁转载