user3118363
user3118363

Reputation: 553

nodejs - route is returning error of 404 after requiring it into server.js

I'm having issues making a request to this route. I don't want to put everything in one file as i want to separate concerns.

But when i import the route into the server file, it still gives a 404 status. Please can someone helpe me out on this please!

This is my login route file:

//Set up
let express = require("express");
let app = express();
let logger = require("morgan");
let bodyParser = require("body-parser");
let cors = require("cors");

let database = require("./database");
let staffModel = require("./schema");

// Endpoint for the login function
app.use(cors());

const { body, validationResult } = require('express-validator/check');
const { sanitizeBody } = require('express-validator/filter');
const { trim } = require('express-validator').validator;

app.use(bodyParser.urlencoded({extended: false})); //Parses urlencoded 
bodies
app.use(bodyParser.json()); //Send JSON responses

app.use(logger('dev')); // Log requests to API using morgan


let login = require("./routes/login");
app.use("/login", login);



app.listen(8080);
console.log("Trazeapp Started, listening on port 8080");

This is my login route file.

//Set up
let express = require("express");
let router = express.Router();

router.post("/login", function(req, res){ 
    req.body.username = trim(req.body.username);
    staffModel.find({"login.username": req.body.username},
        {"login.username":1,"login.password":1,"admin":1})
        .then(data=> {
            if (data.length == 0){
                res.send({"error": "There's no staff with this username"})
            } else{
                // Get the individual values
                let uname = data[0].login.username.toString();
                let pwd = data[0].login.password.toString();
                let adm = data[0].admin.toString();
                // If user and password is correct
                if((req.body.username == uname) && (req.body.password == 
pwd)){
                    //Login information is correct
                    //Check the privilege of who is loggin in
                    if(adm == "yes"){
                        console.log("inside yes");
                        res.send({"username": uname, "password": pwd, 
"admin": true});
                    } 
                    else if(adm == "no"){
                        console.log("admin is: " + adm);
                        res.send({"username": uname, "password": pwd, 
"admin": false});
                    }
                } 
                else if((req.body.username != uname) || (req.body.password 
!= pwd)){
                    //Username and/or password is wrong
                    res.send({"error": "Your Username and/or Password is 
wrong."});
                }
            }
        })
        .catch(err=> res.send({"error": "There's an issue with the 
server."}))
});

module.exports = router;

Upvotes: 0

Views: 158

Answers (1)

jfriend00
jfriend00

Reputation: 707158

Change your route definition from this:

router.post("/login", ...)

to this:

router.post("/", ...)

The /login is already specified here:

app.use("/login", login);

Which means that all routes in your router are already prefixed with /login. So, your code was creating a route for /login/login which is not what you want.


FYI, you could also just change from this:

app.use("/login", login);

to this:

app.use("/", login);

Though it probably makes more sense to keep your whole login router on /login.

Upvotes: 1

Related Questions