1

Writing simple app to fetch data from nodejs server.

but it seems not to get the file in browser as well as in POSTMAN. I have tried multiple times to check the urls but to no avail.

here are my files:

app.js

const express = require('express');
const bodyParser = require('body-parser');
const router = require('./Routes/routes');

const hostname = "localhost";
const port = "8055";

const app = express();

app.use(bodyParser.json());

// CORS
 app.use((req, res, next) => {
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Methods','GET,POST,PUT,PATCH,DELETE');
    res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
    next();
    });

    app.use('/', router);
    app.listen(port,hostname, () => {
    console.log('Server is running on http://${hostname}:${port}');
    })

routes.js

    const express = require('express')

var CityListController = require('../Controllers/City')
var RestaurantCityController = require('../Controllers/Restaurants')
var MenuController = require('../Controllers/Menu')


const router = express.Router();

router.get('/getCityList',CityListController.getCityList);
router.get('/getRestaurantsByCity/:cityname', RestaurantCityController.getRestaurantsByCity);
router.get('/getMenu', MenuController.getMenu);

module.exports = router;

Menu.js

const mealtypes = require('../Models/menu.json');

exports.getMenu = (req, res) => {
const resultname = mealtypes.map(items => items.name)

res.status(200).json({
    message: "widgets data fetched successfully",
    name : resultname
 
   })
 }

menu.json goes like this

[
{
    "_id": "1",
    "name": "Breakfast",
    "content": "Start your day with exclusive breakfast options",
    "image": "assets/breakfast.png"
},
{
    "_id": "2",
    "name": "Lunch",
    "content": "Start your day with exclusive breakfast options",
    "image": "assets/lunch.png"
}
 ]

error is Cannot GET /getMenu

not sure where the error is because it is a simple route.. not sure what is missing. thanks

2
  • 1
    Have you tried removing the CORS? It seems the router is not getting registered. Also, you don't need to use bodyParser.json() as it will be auto done by express v4+. Commented Jan 11, 2022 at 12:53
  • try removing extra slash (/) in router.js file from /getMenu, it should be "getMenu" Commented Jan 11, 2022 at 13:17

3 Answers 3

1

Your code should work with http://localhost:8055/getMenu. I copied your code and works for me link to repo.

{
    "message": "widgets data fetched successfully",
    "name": [
        "Breakfast",
        "Lunch"
    ]
}
Sign up to request clarification or add additional context in comments.

Comments

1

The error Cannot GET / arises from trying to visit http://localhost:8055

  • It is generated because there is no route for the root directory http://localhost:8055/ using the path / in express.

  • The is a route for http://localhost:8055/getMenu which works fine.

Test code

const express = require('express');

const getMenu = (req,res) => res.status(200).json({ test_data: "test_data"});
const router = express.Router();
router.get('/getMenu', getMenu);

const hostname = "localhost";
const port = "8055";

const app = express();
app.use('/', router);
app.listen(port,hostname, () => {
    console.log(`Server is running on http://${hostname}:${port}`);
})

Comments

1

It seems there has been a technical error.

It is working fine now. I just restarted nodemon app.js.

and it is working now. Been trying this whole time to get the url fixed.

thanks for your help all

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.