简体   繁体   中英

Express Router not picking pages from app.js

I started with the basic sample of express and node. i was able to set it up with mongoDB as well.Now the problem comes in as when i try to refactor that code into different modules ie index,login and register.I have put the different mechanisms into different files and added routing for the same.But it simply does not pick up those files ( anything apart from the index page).

I am attaching the source code for my app.js .

var config = require('./config');
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var routes = require('./routes/index');
var session=require('express-session');

var login = require('./routes/login');
var register = require('./routes/register');


var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');



// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());

//session and passport initialization
app.use(session({
secret: 'quifers',
resave: false,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(express.static(path.join(__dirname, 'public')));

// Define the routes here
app.use('/', routes);

app.use('/login',login);
app.use('/register',register);

var Account = require('./models/account');
passport.use(new LocalStrategy(Account.authenticate()));
passport.serializeUser(Account.serializeUser());
passport.deserializeUser(Account.deserializeUser());

// mongoose
//mongoose.createConnection(config.db.URL);
mongoose.connect(config.db.URL);
var db = mongoose.connection;
db.on('error', function () {
console.error('database connection error:');
process.exit(1);
});
db.once('open', function (callback) {
debugger;
  // yay!
 });

// catch 404 and forward to error handler
app.use(function(req, res, next) {
 var err = new Error('Not Found');
 err.status = 404;
  next(err);
});


// error handlers

// development / test error handler
// will print stacktrace
if (config.env.development || config.env.test) {
  app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
  message: err.message,
  error: (config.env.development || config.env.test) ? err : {}
});
});
}




module.exports = app;

My login.js inside the views folder looks like :

var passport = require('passport');
var Account = require('../models/account');
var express = require('express');
var router = express.Router();

router.get('/login', function(req, res) {
  res.render('login', { user : req.user });
});

router.post('/login', passport.authenticate('local'), function(req, res) {
  res.redirect('/');
 });

module.exports=router;

But when i go for login, it reloads he page and redirects to the same /login route and says not found.

I am a newbie to express, Any help would be appreciated .Thanks

The reason why it doesn't work is because the route you're trying to access doesn't exist.

login.js is mounted under '/login', but in the login.js file you redeclare /login one more time, so you end up having a route that look like this : /login/login

To make it work, replace "/login" by "/".

Your code should look like this :

var passport = require('passport');
var Account = require('../models/account');
var express = require('express');
var router = express.Router();

router.get('/', function(req, res) {
  res.render('login', { user : req.user });
});

router.post('/', passport.authenticate('local'), function(req, res) {
  res.redirect('/');
 });

module.exports=router;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM