Nodejs- Referenceerror: Fetch Is Not Defined, And How To Solve It?

What is Node.js?

Node.js, the open-source server environment, has become very popular for generating dynamic page content. It can create, read, write, and delete files on the server. Moreover, it collects, adds, deletes, and modifies data in your database. Using an asynchronous approach, Node.js significantly reduces waiting times compared to other backend web technologies.

How Node.js handles a file request?

  • By sending the task to the computer's file system.
  • By being ready to handle the subsequent request
  • By enabling the server to return the content to the client when the file system has opened and read the file

Benefits of Node.js

  • Enable coding in JavaScript for Client and server side
  • Very fast at building high-traffic applications
  • Plenty of tools and modules
  • Suitable for various industries
  • Super-fast performance 
  • Scalability

What is Fetch API?

Fetch() is a widely liked cross-platform HTTP client API that runs in browsers and Web/Service Workers. It offers a JavaScript interface for interacting with and accessing protocol elements like requests and answers. For example, the fetch () method jolts the process of fetching a resource from a server. This kind of functionality was earlier completed using XMLHttpRequest. FetchAPI is based on async and await.

What is Fetch Async & Await?

Async functions are available natively in Node and are denoted by the async keyword in their declaration. They always return a promise, even if you don’t explicitly write them to do so. Also, the await keyword is only available inside async functions at the moment – it cannot be used in the global scope.

In an async function, you can await any Promise or catch its rejection cause.

The async and await keywords enable asynchronous, promise-based behaviour to be written in a cleaner style, avoiding the need to explicitly configure promise chains.

This version of the example could be simpler to comprehend:

async function getText(file) {

let x = await fetch(file);

let y = await x.text();



(Ref: )

If you are a Node JS developer, you must have tried getting the data from an API in Node.js using Fetch. And most likely, you have encountered the following error.

ReferenceError: fetch is not defined

There is no Fetch in Node.js

This happens because Fetch doesn't work in Node.js. As the Fetch API is not implemented in Node, it is necessary to use a package to implement and use it. So, if you have a team of Node JS Developers from the best company, you must manifest the solution for using Fetch in Node.js.

What is the solution?

If your project does not have a package.json file, create one in your project's root directory:

npm init -y

Now install the node-fetch library.

npm install node-fetch

Now you can import and use the module just like the fetch() method in the browser.

import fetch from 'node-fetch';

async function getUser() {

try {

const response = await fetch('');

if (!response.ok) {

throw new Error(`Error! status: ${response.status}`);


const result = await response.json();

return result;

} catch (err) {




console.log(await getUser());

At the time of writing, you have to set the type property to the module in your package.json file to use ES6 module imports and exports in a NodeJs project.


"type": "module",

// ... rest


If you run Nodejs script, you will get the result from calling the API.

ReferenceError fetch is not defined in NodeJs (older versions)

Only do the following if you have older version of Nodejs and need to use the 'require' syntax instead of 'import/export'

npm install node-fetch@2

Version 2 of the node-fetch package was set up. Make sure you do not have the type property set in your module. The old require method can now be used to import the fetch package.

Use older require syntax

const fetch = require('node-fetch');

async function getUser() {

try {

const response = await fetch('');

if (!response.ok) {

throw new Error(`Error! status: ${response.status}`);


const result = await response.json();

return result;

} catch (err) {




It's best to keep your client-side and server-side code's imports consistent. Nevertheless, this strategy works if you need to support an earlier version of NodeJs.

Code Ref-

Why Utilize the Node.js Fetch API?

To help the developer community, the fetch API is offered as a pre-configured Node module, and the benefits of it are;

  • Cross-platform Familiarity
  • Faster Implementation
  • No Additional Fetch Packages

With the new launch, Fetch is now available as an experimental feature in Node v17. Suppose you want to try its trial version before the major release; download and upgrade the node.js version to 17.5. Then, hire a Node js developer who is well abreast with the regular updates and changes introduced in the market to harness the power of Fetch in Node.js. 

About Author

Manektech Team

ManekTech Team

ManekTech is a well-known software development and IT consulting company, providing custom software, website, and mobile app development services. ManekTech has own content writing and development team who writes content on various and trending technology that it serves currently.

Need a consultation?

Drop us a line! We are here to answer your questions 24/7

Areas we serve


4100 NW Loop 410, Suite 200, San Antonio, Texas, USA 78229


7 Artisan Place Harrow, HA3 5DS


4th Floor, Timber Point, Prahaladnagar Road, Ahmedabad, Gujarat - 380015