Node.js 路线护照本地

Node.js 路线护照本地,node.js,express,routes,passport-local,Node.js,Express,Routes,Passport Local,我正试图使用passport local来限制对网站的访问。 为此,我使用login_应用程序运行passport local,但这本身就是从主app.js调用的路由。 当尝试在第二级(passport文件/路由)上路由时,我发现找到了我的代码,但没有调用其中的函数。 这是我的登录应用程序代码: var express = require('express'); var router = express.Router(); var mongoose = req

我正试图使用passport local来限制对网站的访问。
为此,我使用login_应用程序运行passport local,但这本身就是从主app.js调用的路由。 当尝试在第二级(passport文件/路由)上路由时,我发现找到了我的代码,但没有调用其中的函数。
这是我的登录应用程序代码:

var express       = require('express');
var router        = express.Router();
var mongoose      = require ('mongoose');
var flash         = require('connect-flash');
var passport      = require('passport');
var LocalStrategy = require('passport-local').Strategy;

var morgan        = require('morgan');
var cookieParser  = require('cookie-parser');
var bodyParser    = require('body-parser');
var session       = require('express-session');

let app = express();

// pass passport for configuration
require('./passport-files/passport')(passport); 

//For express application
app.use(morgan('dev'));
app.use(cookieParser()); // read cookies (needed for auth)
app.use(bodyParser()); // get information from html forms

//Initialize passport session
app.use(session({ secret: 'secret' })); // session secret
app.use(passport.initialize());
app.use(passport.session());
app.use(flash()); // use connect-flash for flash messages stored in session


// load our routes and pass in our app and fully configured passport
require('./passport-files/routes')(app, passport);

module.exports = router;
为了简化问题,我只将routes.js文件放在这里:

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

let app = express();
module.exports = function (app, passport) {
//function views (app, passport) {

/* GET users listing. */
// HOME PAGE (with login links) ========
app.get('/', function(req, res) {
    res.render('login-welcome', {});
});

// LOGIN ===============================
// show the login form
app.get('/log-in', function(req, res) {
    res.render('login', { message: req.flash('loginMessage') }); 
});

// process the login form
app.post('/log-in', passport.authenticate('local-login', {
    successRedirect : '/admin', // redirect to the secure profile section
    failureRedirect : '/log-in', // redirect back to the signup page if there is an error
    failureFlash : true // allow flash messages
}));

// we will use route middleware to verify this (the isLoggedIn function)
app.get('/profile', isLoggedIn, function(req, res) {
    res.render('profile', {
        user : req.user // get the user out of session and pass to template
    });
});

app.get('/logout', function(req, res) {
    req.logout();
    res.redirect('/');
}); 
};

// route middleware to make sure a user is logged in
function isLoggedIn(req, res, next) {

// if user is authenticated in the session, carry on 
if (req.isAuthenticated())
    return next();

// if they aren't redirect them to the hosme page
res.redirect('/');   

};
我基本上是使用scotch.io()中的示例构建的,但是我无法让它以这种方式工作。 如果我将路由直接写入login_应用程序,则它们会被识别,即使身份验证仍然不起作用


你们有谁知道如何解决这个问题吗?是否需要更多信息?

这可能是问题所在:在您的登录应用程序模块中,您正在导出
路由器
,但实际上您尚未在
路由器
上定义任何路由,它们都是在
应用程序
的新实例上定义的

在一个文件中创建路由器并将其导出到主
app.js
文件中使用的简单示例如下:

/** app.js */
var express = require('express');
var app = express();
var myRoutes = require('./routes');
app.use(myRoutes);
app.listen(3000);


/** routes.js */
// instaniate a new router, add routes/middleware on it, and export it
var router = require('express').Router();
// define your routes and middleware here
// router.use( ... )
module.exports = router;
/** app.js */
var express = require('express');
var app = express();
require('./routes')(app); // pass your main `app` instance into the function
app.listen(3000);


/** routes.js */
module.export = function(app) {
  // define all your routes and middleware here directly on the `app` that gets passed in
  // app.use( ... )
}
我认为scotch.io教程正在使用的另一种模式是,让routes文件导出一个函数,将主应用程序实例传递到该函数中。然后这两个文件将如下所示:

/** app.js */
var express = require('express');
var app = express();
var myRoutes = require('./routes');
app.use(myRoutes);
app.listen(3000);


/** routes.js */
// instaniate a new router, add routes/middleware on it, and export it
var router = require('express').Router();
// define your routes and middleware here
// router.use( ... )
module.exports = router;
/** app.js */
var express = require('express');
var app = express();
require('./routes')(app); // pass your main `app` instance into the function
app.listen(3000);


/** routes.js */
module.export = function(app) {
  // define all your routes and middleware here directly on the `app` that gets passed in
  // app.use( ... )
}

谢谢你的回答!!我解决了我遇到的问题,即将应用程序用作两个不同的应用程序,并通过切换到路由器来解决它。谢谢你的帮助