Nodejs- ReferenceError: Fetch Is Not Defined, And How To Fix It?

Table of Contents

    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();

    myDisplay(y);

    }

    (Ref: https://www.w3schools.com/jsref/api_fetch.asp )

    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('https://randomuser.me/api/');

    if (!response.ok) {

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

    }

    const result = await response.json();

    return result;

    } catch (err) {

    console.log(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('https://randomuser.me/api/');

    if (!response.ok) {

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

    }

    const result = await response.json();

    return result;

    } catch (err) {

    console.log(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- https://bobbyhadz.com/blog/javascript-referenceerror-fetch-is-not-defined

    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

    Ruchir Pandya

    Delivery Head of Web

    Ruchir Pandya is a seasoned software and business professional with over 15 years of experience in IT, Software Development, and operations. As the overseer of the Open-Source Web department (PHP Department), he takes charge of development and operations.

    Subscribe to Our Newsletter!

    Join us to stay updated with our latest blog updates, marketing tips, service tips, trends, news and announcements!

    OUR OFFICES


    ManekTech's Global Presence

    USA

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

    UK

    7 Artisan Place Harrow, HA3 5DS

    India

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

    Germany

    Franz-Joseph-Strasse, 11,Munich, 80801, Germany

    South Africa

    The Business Centre No 1. Bridgeway Road, Bridgeway Precint, Century City, Cape Town, South Africa, 7446

    PREV
    NEXT