ENOENT

Node.js ErrorFilesystem ErrorCommonLast updated: May 12, 2024Tested on:Node.js v20 LTSNPM v10.2June 2026

ENOENT stands for "Error NO ENTry" and indicates that Node.js tried to access a file or directory that doesn't exist.

ENOENT Quick Fix⏱️ Est. Fix Time: 3 minutes

Usually happens because:

  • The File Doesn't Exist
  • Wrong Relative Path
  • The Directory Doesn't Exist

🔍 Quick Checklist:

What is ENOENT?

ENOENT is one of the most common errors you'll encounter in Node.js. It stands for "Error NO ENTry" and indicates that Node.js tried to access a file or directory that doesn't exist. This error is most often caused by an incorrect file path, a missing file, or attempting to read a directory that has been moved or deleted. If you're working with the fs module, uploading files, reading configuration files, or loading assets, you've probably seen this error before. Think of it like asking someone to deliver a package to an address that doesn't exist. The delivery company isn't broken—they simply can't find the destination. Node.js works the same way. When your code requests a file that isn't present, it throws an ENOENT error.

Common Causes

  • The File Doesn't Exist: The target file has not been created or is missing from the directory.
  • Wrong Relative Path: Paths resolved from the current working directory (process.cwd()) differ from the folder where the source file resides.
  • The Directory Doesn't Exist: Attempting to write a file into a folder that has not been created yet.
  • File Was Renamed or Deleted: A filename was modified or deleted by another process or collaborator.
  • Typographical Errors: Small spelling discrepancies in names or folders (e.g. config.json vs configs.json).
  • Incorrect Case: Filenames are case-sensitive on Linux and macOS (e.g. Logo.png vs logo.png).
CauseFrequency
The File Doesn't Exist⭐⭐⭐⭐⭐
Wrong Relative Path⭐⭐⭐⭐
The Directory Doesn't Exist⭐⭐⭐

Common Mistakes

  • Assuming Relative Paths Start From the Current File: Relative paths are resolved from the application's current working directory, not from the location of the source file.
  • Ignoring Missing Directories: Creating a file does not automatically create the folder containing it. Always ensure the directory exists before writing.
  • Hardcoding File Paths: Paths like C:\Users\John\Desktop\data.json work only on a specific machine. Build paths dynamically instead.
  • Ignoring Case Sensitivity: A project that works perfectly on Windows may fail on Linux because filenames don't match exactly.

How to Fix

1Verify the Path: Log or print the resolved path (console.log(filePath)) before executing the fs operation to make bugs obvious.
2Use Absolute Paths: Build paths dynamically relative to your project root (e.g. using path.join(process.cwd(), 'config.json')) instead of relying on process.cwd().
3Check Whether the File Exists: Verify presence before reading or writing using fs.promises.access().
4Create Missing Directories: Ensure the parent folder exists using fs.promises.mkdir(dir, { recursive: true }) before writing new files.
5Review Deployment Paths: Verify path mapping structures on your production or staging server since file structures can change after builds.

Framework-Specific Examples

Instead of crashing, this example detects the missing file and handles the situation appropriately.

Complete Example Example
import { readFile } from "node:fs/promises";

async function loadConfig() {
    try {
        const data = await readFile("./config.json", "utf8");
        console.log(data);
    } catch (error) {
        if (error.code === "ENOENT") {
            console.log("Configuration file not found.");
            return;
        }
        throw error;
    }
}

loadConfig();

Server Configuration Examples

Pre-creating directories recursively on startup.

Directory Access Check Config
import { mkdir } from "node:fs/promises";

await mkdir("./uploads", {
    recursive: true
});

Best Practices

  • Prefer absolute paths when possible.
  • Keep configuration files in predictable locations.
  • Validate uploaded file paths before reading them.
  • Handle ENOENT separately from other filesystem errors.
  • Create required directories during application startup.
  • Log the full path when debugging file-related issues.

Frequently Asked Questions (FAQ)

Q: Is ENOENT only for missing files?

No. It can also indicate that a directory in the path doesn't exist.

Q: Can ENOENT happen when writing a file?

Yes. If the parent directory doesn't exist, writing the file will fail with ENOENT.

Q: Why does my code work on Windows but fail on Linux?

Linux filesystems are typically case-sensitive. A mismatch in filename capitalization is a common cause of ENOENT.

Q: Does reinstalling Node.js fix ENOENT?

No. ENOENT is almost always related to your application's file paths or filesystem, not the Node.js installation itself.

Still having this problem?

Didn't solve your problem?

SuggestRequest Error