Muhammad Rohail
Muhammad Rohail

Reputation: 291

Node js: getting an error Cannot GET /route when i use get method

When I use the "use" method my code works fine, but when I use the "get" it gives an error: "Cannot GET /route1".

My Code:

const express = require('express');
const app = express();
const expbs = require('express-handlebars');
const path = require('path');

const routes = require('./routes/handlers');

app.use(express.static('public'));

const hbs = expbs.create({
    defaultLayout: 'main',
    layoutsDir: path.join(__dirname, 'views/mainLayout'),
    partialsDir: path.join(__dirname, 'views/pieces'),
});

app.engine('handlebars', hbs.engine);
app.set('view engine', 'handlebars');

app.get('/route1', routes);

app.listen(8080, () => {
    console.log('Server is starting at port ', 8080);
});

I am new to node js, please tell me can i define routes with "get" method.

Upvotes: 0

Views: 912

Answers (3)

Aussie Niki
Aussie Niki

Reputation: 108

app.get('/route1', routes);

woulde be app.use('/route1', routes);

Upvotes: 0

Naveen Vignesh
Naveen Vignesh

Reputation: 1359

If you are using router you coudn't use get method.

Here is the docs.

Only the handler has access to get method. app.use will add path to api route which point to get,post and etc.

You could only explicitly define a get as a standalone get route.

app.get('/route1', (req, res) => {
   res.send("You have hit route1 - get");
});

When using router you could only include the router object as a parameter in app.use(path, routerObj) method.

Upvotes: 0

Taha
Taha

Reputation: 135

I believe your routes/handlers.js look something like this

var express = require('express');
var router = express.Router();

function greetUser(req, res){
    res.send("Welcome dear user");
}
router.get("/", greetUser);
router.post("/", (req, res)=>{ res.send("user registered") });

module.exports = router

The problem here is this last line, this router object which is being exported works fine for app.use middleware, while .get or .post expects 2nd parameter to be a function

If you export this greetUser function from your router as well or receive this function from anywhere, this should start functioning well. Practically it would be

app.get("/route1", (req, res)=>{ res.send({status : true, message : "sample JSON"})})

Upvotes: 2

Related Questions