Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Fetching data via react from laravel route

I have implemented the following function in my laravel app that used Laravel Framework 8.83.16:

    public function checkIdentifier($physicalItem_identifier)
    {
        try {
            $con = "mysql";

            $res = DB::connection($con)->table('identifiers')
                ->select('*')
            ->where('physicalItem_identifier', '=', $physicalItem_identifier)
            ->where('available', '=', TRUE)
            ->get();

            if ($res->count()) {
                return response()->json(['exists' => true],200);
            } else {
                return response()->json(['exists' => false], 200);
            }
        } catch (\Exception $e) {
            Log::error($e);
            return response()->json(['exists' => 'error'],200);
        }
    }

My route looks like the following:

Route::get('v1/checkIdentifier/{physicalItem_identifier}', [ItemController::class,'checkIdentifier']);

The following url works for my laravel application:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

http://localhost/project/public/v1/checkIdentifier/testIdentifier

For my react-app I am using:

{
  "name": "react-app",
  "version": "1.0",
  "private": true,
  "dependencies": {
    "babel-eslint": "10.0.3",
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    "react-redux": "^7.2.4",
    "react-router-dom": "^6.3.0",
    "react-scripts": "3.2.0",
    "redux": "^4.1.1",
    "redux-thunk": "^2.3.0",
    "web-vitals": "^1.0.1",
    "web3": "^1.6.1",
    "web3-eth-contract": "^1.5.2"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "devDependencies": {
    "autoprefixer": "^10.4.7",
    "postcss": "^8.4.14",
    "tailwindcss": "^3.0.24"
  }
}

I have created the following function to check if the identifier exists:

import { Routes, Route, useParams } from "react-router-dom";

function MintComponent() {

  const { identifierUrl } = useParams();

  const getData = async () => {
      let url = "http://localhost/project/public/v1/checkIdentifier/" + identifierUrl;

    try {
      const response = await fetch(url);
      const data = await response.json();
      // enter you logic when the fetch is successful
      console.log(data);
    } catch (error) {
      // enter your logic for when there is an error (ex. error toast)
      console.log(error);
    }
    
    ...
  };

When the above function runs in my react app I get:

'TypeError: Failed to fetch\n    at getData (http://localhost:3000/static/js/main.chunk.js:210:32)\n    at onClick (http://localhost:3000/static/js/main.chunk.js:295:7)\n    at HTMLUnknownElement.callCallback (http://localhost:3000/static/js/1.chunk.js:77068:18)\n    at Object.invokeGuardedCallbackDev (http://localhost:3000/static/js/1.chunk.js:77117:20)\n    at invokeGuardedCallback (http://localhost:3000/static/js/1.chunk.js:77177:35)\n    at invokeGuardedCallbackAndCatchFirstError (http://localhost…1.chunk.js:79176:7)\n    at dispatchEvent (http://localhost:3000/static/js/1.chunk.js:79094:23)\n    at unstable_runWithPriority (http://localhost:3000/static/js/1.chunk.js:116209:16)\n    at runWithPriority$1 (http://localhost:3000/static/js/1.chunk.js:84474:14)\n    at discreteUpdates$1 (http://localhost:3000/static/js/1.chunk.js:95396:18)\n    at discreteUpdates (http://localhost:3000/static/js/1.chunk.js:76878:16)\n    at dispatchDiscreteEvent (http://localhost:3000/static/js/1.chunk.js:79060:7)'

I also checked the network tab and it seems to be a CORS error:

enter image description here

Any suggestions why the fetch does not work for my react-app on my local machine?

I appreciate your replies!

>Solution :

As a quick fix for the CORS error, you can attach the Access-Control-Allow-Origin header whenever you return a response:

return response()->json(['exists' => true],200)->header('Access-Control-Allow-Origin', 'http://localhost:3000');

A more thorough solution would be to use a CORS middleware, such as in this post (just don’t set the value to *).

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading