دقیقه مطالعه

راهنمای رفع خطای ENOENT در نود جی اس (Nodejs Enoent eror)

راهنمای رفع خطای ENOENT در نود جی اس (Nodejs Enoent eror)
29 - مهر - 1402

در پارس وب سرور شما می‌توانید  به راحتی پروژه های خود را در بخش nodejs application  که به صورت اختصاصی برای سی پنل توسط شرکت  طراحی و اضافه شده است، راه اندازی کنید. (راهنمای راه اندازی پروژه نود جی اس)

راه اندازی پروژه نود جی اس

امکان راه اندازی پروژه های نود جی اس، بر روی هر دو سرویس هاست های نود جی اس و پایتون امکان پذیر می باشد و هر دو سرویس دارای امکانات مشابهی هستند و شما با تهیه هر کدام از دو سرویس، می توانید پروژه های پایتون و نود جی اس را همزمان راه اندازی کنید. (مشاهده مشخصات سرویس های هاست نود جی اس)

همین طور شما می توانید به راحتی هاست خود را از شرکت ها دیگر به هاست های پارس وب سرور انتقال دهید.

انتقال اطلاعات به طور کامل خواهد بود و ایمیل های شما هم به بدون مشکل و به صورت کامل منتقل خواهد شد.

برای انتقال می توانید از طریق تیکت درخواست خود را مطرح کنید تا همکاران بخش فنی روند کار را با شما هماهنگ کنند. (ارسال تیکت)

بعد از اینکه پروژه های نود جی اس خود را راه اندازی کردید، با استفاده از دستور

pm2 logs yourdomain.com

امکان مشاهده لاگ پروژه و در صورت وجود خطا، مشاهده خطای پروژه در ترمینال وجود دارد.

* به جای yourdomain.com  نام دامنه یا ساب دامنه پروژه  را باید وارد کنید.

یکی از رایج ترین  ارورهای نود جی اس که در ترمینال مشاهده می شود، ارور  ENOENT  می باشد.

عبارت ENOENT مخفف اصطلاح Error NO ENTry (or Error NO ENTity) می باشد و به این معنی هست که فایل یا فولدر مورد نظر، طبق مسیردهی موجود در پروژه وجود ندارد و فایل و فولدر مورد نظر پیدا نشده است.

این مشکل عموما به دلیل اشتباه در مسیر دهی فایل ها و فولدرها پیش می آید.

با توجه به اینکه در مسیردهی لینوکس علامت نقطه (.)  به معنی دایرکتوری فعلی می باشد در صورتی که این نکته در نظر گرفته نشود، ممکن است در مسیردهی اشتباه پیش آید و با خطای ENOENT  در ترمینال مواجه شویم.

خطای نمایش داده شده در ترمینال ممکن است خطایی مشابه با متن پایین باشد :

npm ERR! code ENOENT
npm ERR! syscall open
npm ERR! path /home/username/project/package.json
npm ERR! errno -2
npm ERR! enoent ENOENT: no such file or directory, open '/home/username/project/package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent
npm ERR! A complete log of this run can be found in:
npm ERR! /home/username/.npm/_logs/2023-09-30T07_09_59_250Z-debug-0.log

مشخصا در کدهای ارور بالا، فایل  package.json در روت اصلی هاست موجود نیست .
این مورد ممکن است چند علت داشته باشد :
یک اینکه پروژه به درستی راه اندازی نشده باشد و یا اینکه مسیردهی در پروژه به درستی اجرا نشده است و فایل مورد نظر در مسیر معرفی شده موجود نیست.
البته ممکن است گاهی غلط املایی و یا جا افتادن یک کاراکتر  و یا اضافه شدن یک کاراکتر به آدرس فایل و یا فولدر باعث شود دسترسی یه هاست قطع شود

همینطور در صورت وجود ارور در ترمینال، خطای نمایش داده شده در فایلی که که شامل تاریخ و ساعت ایجاد لاگ می باشد در مسیر   npm/_logs   ذخیره می شود که برای بررسی بیشتر، می توانید این لاگ را دانلود و خطاهای پروژه را بررسی بفرمایید.

عموما ممکن است با تصحیح نام فایل ها و فولدرها و استاپ و استارت کردن پروژه،  مشکل پروژه رفع شده و پروژه ران شود.
اما اگر پروژه ران نشد و خطا پا برجا بود، می توانید با ارسال تیکت به بخش فنی، رفع مشکل را پیگیری بفرمایید .

سایر خطاهای مهم نود جی اس که ممکن است در ترمینال مشاهده شود  :

1- ECONNRESET

این خطا زمانی رخ می دهد و نمایش داده می شود که ارتباط بین کلاینت و سرور قطع شده باشد. در این صورت ارتباط با سرور به یک باره قطع می شود و رکوئست های http  با شکست مواجه می شوند.

2- ENOTFOUND

این خطا زمانی اتفاق می افتد که دامنه مورد استفاده در یک پروژه نود جی اس  منقضی شده باشد و یا  dns  آن درست تنظیم نشده باشد و یا اینکه dns  تازه تنظیم شده باشد اما ست نشده باشد.

3- ETIMEDOUT

هنگامی که یک اتصال یا درخواست HTTP پس از مدتی به درستی بسته نشود، خطای ETIMEDOUT توسط Node.js  نمایش داده  می شود.

اگر در درخواست‌های HTTP خروجی خود یک بازه زمانی تنظیم نکرده باشید، ممکن است هر از چند گاهی با این خطا مواجه شوید.
برای رفع مشکل می توانید  تعداد درخواست های خروجی را به یک تعداد خاص محدود کرد .

4- ECONNREFUSED

Error: connect ECONNREFUSED 127.0.0.1:8000
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1157:16)
Emitted 'error' event on ClientRequest instance at:
    at Socket.socketErrorListener (node:_http_client:442:9)
    at Socket.emit (node:events:526:28)
    at emitErrorNT (node:internal/streams/destroy:157:8)
    at emitErrorCloseNT (node:internal/streams/destroy:122:3)
    at processTicksAndRejections (node:internal/process/task_queues:83:21) {
  errno: -111,
  code: 'ECONNREFUSED',
  syscall: 'connect',
  address: '127.0.0.1',
  port: 8000
}

خطای ECONNREFUSED زمانی نمایش داده می شود که اتصال با سرویس   endpoint  بر قرار نشود.

در زمانی که سرویس هدف غیر فعال باشد این اتفاق می افتد. به طور مثال این خطا زمانی اتفاق می افتد که که اپلیکیشن قصد اتصال به  آدرس  http://localhost:8000  دارد در حالیکه در  endpoint  برنامه ای در حال اجرا و منتظر نمی باشد.

5- ERRADDRINUSE

Error: listen EADDRINUSE: address already in use :::3001
    at Server.setupListenHandle [as _listen2] (node:net:1330:16)
    at listenInCluster (node:net:1378:12)
    at Server.listen (node:net:1465:7)
    at Function.listen (/home/ayo/dev/demo/node_modules/express/lib/application.js:618:24)
    at Object. (/home/ayo/dev/demo/main.js:16:18)
    at Module._compile (node:internal/modules/cjs/loader:1103:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1157:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
Emitted 'error' event on Server instance at:
    at emitErrorNT (node:net:1357:8)
    at processTicksAndRejections (node:internal/process/task_queues:83:21) {
  code: 'EADDRINUSE',
  errno: -98,
  syscall: 'listen',
  address: '::',
  port: 3001
}

این خطا عموما در زمان استارت و یا رستات وب سرور اتفاق می افتد .

وقتی سرور قصد  listen  از پورتی دارد که آن پورت توسط اپلیکیشن دیگری در حال استفاده می باشد ،این خطا نمایش داده می شود.

ساده ترین روش برای حل این مشکل،  اجرای اپلیکیشن بر روی پورتی متفاوت می باشد. در صورتی که لزوما باید از همین پورت  تعریف شده استفاده شود باید آی دی پروسسی که پورت را اشغال کرده است را پیدا کرده و آن پروسس را با دستور زیر حذف کرد.

lsof -i tcp:3000
kill -9 2902

در مثال بالا پروسس اجرا شده بر روی پورت مورد نظر ما با آی دی 2902 کیل می شود. چنانچه هر یک از خطاهای بالا در ترمینال برای شما نمایش داده می شود می تواندی تیکت ارسال بفرمایید. برای ارسال تیکت حتما متن ارور و یا اسکرین شات خطا را ارسال بفرمایید و اگر چند پروژه در حال اجرا دارید هم نام پروژه را در تیکت اعلام بفرمایید  (ارسال تیکت)

4.7/5 - (3 امتیاز)
دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

[bws_google_captcha]