RandyBeans
RandyBeans

Reputation: 109

NodeJs Rest api: I can make calls in postman but the route returns as not found in url

When I make a post request to the /login endpoint in postman it works fine and returns all the information. However when I try to navigate to the end point in the url the route returns unfound. In the console I get GET http://localhost:5000/login 404 (Not Found). Why is the console returning for a get request? If I try to call the post request in axios I get xhr.js:177 POST http://localhost:3000/login 404 (Not Found).

app.js

require("dotenv").config();
const express = require('express');
const morgan = require('morgan');
const bodyParser = require('body-parser');
const router = express.Router();
const cors = require('cors');

const app = express();

app.use(cors())

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true
}));

const mongoose = require('mongoose');
const connection = "password"

mongoose.connect(connection, {
    useNewUrlParser: true,
    useCreateIndex: true,
    useUnifiedTopology: true
})


const clientRoutes = require('./routes/clientRoutes');
const traderRoutes = require('./routes/traderRoutes');
const loginRoute = require('./routes/loginRoute')

app.use('/', clientRoutes, traderRoutes, loginRoute);

// setup a friendly greeting for the root route
app.get('/', (req, res) => {
  res.json({
    message: 'Welcome to the REST API for Pave!',
  });
 
});

// send 404 if no other route matched
app.use((req, res) => {
  res.status(404).json({
    message: 'Route Not Found',
  });
});

// setup a global error handler
app.use((err, req, res, next) => {
  if (enableGlobalErrorLogging) {
    console.error(`Global error handler: ${JSON.stringify(err.stack)}`);
  }

  res.status(err.status || 500).json({
    message: err.message,
    error: {},
  });
});

app.listen(5000, () => console.log('Listening on port 5000!'))

loginRoute.js

require("dotenv").config();

const express = require("express");
const router = express.Router();
const jwt = require("jsonwebtoken");
const bcryptjs = require("bcryptjs");
const Client = require("../models/clientSchema");
const Trader = require("../models/traderSchema");

function asyncHandler(callback) {
    return async (req, res, next) => {
      try {
        await callback(req, res, next);
      } catch (error) {
        next(error);
        console.log(error);
      }
    };
  }

router.post('/login', asyncHandler(async (req, res, next) => {

    let user = req.body;
    const trader = await Trader.findOne({ emailAddress: req.body.emailAddress })
    if (user && trader) {
      
      console.log(trader)
      let traderAuthenticated = await bcryptjs.compareSync(user.password, trader.password);
      console.log(traderAuthenticated)
   
  
        if (traderAuthenticated) {
  
          console.log('Trader match')
           const accessToken = jwt.sign(trader.toJSON(), process.env.ACCESS_TOKEN_SECRET)
           res.location('/trader');
            res.json({
                      trader: trader,
                      accessToken: accessToken
                    }).end();
          } else {
            res.status(403).send({ error: 'Login failed: Please try again'}).end();
          }

    } else if (user && !trader) {

      const client = await Client.findOne({emailAddress: req.body.emailAddress})
      console.log(client)
      let clientAuthenticated = await bcryptjs.compareSync(user.password, client.password);
      console.log(clientAuthenticated)
 
  
        if (clientAuthenticated) {
  
          console.log('Client match')
           const accessToken = jwt.sign(client.toJSON(), process.env.ACCESS_TOKEN_SECRET)
           res.location('/client');
            res.json({ 
                       client: client,
                       accessToken: accessToken
                    });
            
          } else {

            res.status(403).send({ error: 'Login failed: Please try again'}).end();

          }
    } else {
      res.status(403).send({ error: 'Login failed: Please try again'}).end();
    }
  })
  );

module.exports = router;

Upvotes: 0

Views: 929

Answers (2)

iamsohel
iamsohel

Reputation: 397

you are calling with axios with wrong port no. it should, POST method http://localhost:5000/login as your application is running on port 5000. but you are calling, POST http://localhost:3000/login

Upvotes: 0

IAmDranged
IAmDranged

Reputation: 3020

You set POSTMAN to make a POST request, right? When you enter a url in the browser, that causes a GET request - and you have no route to manage this that I can see, but for the default Not found.

Upvotes: 1

Related Questions