راهنمای رفع خطای ENOENT در نود جی اس (Nodejs Enoent eror)
در پارس وب سرور شما میتوانید به راحتی پروژه های خود را در بخش 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 کیل می شود. چنانچه هر یک از خطاهای بالا در ترمینال برای شما نمایش داده می شود می تواندی تیکت ارسال بفرمایید. برای ارسال تیکت حتما متن ارور و یا اسکرین شات خطا را ارسال بفرمایید و اگر چند پروژه در حال اجرا دارید هم نام پروژه را در تیکت اعلام بفرمایید (ارسال تیکت)