node.JS Express 护照路由
Posted
技术标签:
【中文标题】node.JS Express 护照路由【英文标题】:node.JS Express passport routing 【发布时间】:2015-01-03 01:34:09 【问题描述】:我创建了一个简单的项目,有 3 个页面:主页、联系人和关于。
一切正常,然后我想用 mongo 添加用户注册。
所以我关注了这个tutorial
但是,当我添加一些新路线时,我无法访问更多页面。
这是我的index.js
,当我可以访问我的 3 个页面时
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res)
res.render('index', title: 'Express' );
);
/* GET contact page. */
router.get('/contact', function(req, res)
res.render('contact');
);
/* POST contact page (submit). */
router.post('/contact', function(req, res)
res.render('contact', name: req.param('name') );
);
/* GET home page. */
router.get('/home', function(req, res)
res.render('home');
);
/* POST home page (submit). */
router.post('/home', function(req, res)
res.render('home', comm: req.param('comm') );
);
/* GET about page. */
router.get('/about', function(req, res)
res.render('about');
);
module.exports = router;
一切都简单而有效。 而现在,就是这样:
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res)
res.render('index', title: 'Express' );
);
/* GET contact page. */
router.get('/contact', function(req, res)
res.render('contact');
);
/* POST contact page (submit). */
router.post('/contact', function(req, res)
res.render('contact', name: req.param('name') );
);
/* GET home page. */
router.get('/home', function(req, res)
res.render('home');
);
/* POST home page (submit). */
router.post('/home', function(req, res)
res.render('home', comm: req.param('comm') );
);
/* GET about page. */
router.get('/about', function(req, res)
res.render('about');
);
module.exports = router;
module.exports = function(passport)
// /* GET login page. */
// router.get('/', function(req, res)
// // Display the Login page with any flash message, if any
// res.render('index', message: req.flash('message') );
// );
/* Handle Login POST */
router.post('/login', passport.authenticate('login',
successRedirect: '/home',
failureRedirect: '/',
failureFlash : true
));
/* GET Registration Page */
router.get('/signup', function(req, res)
res.render('register',message: req.flash('message'));
);
/* Handle Registration POST */
router.post('/signup', passport.authenticate('signup',
successRedirect: '/home',
failureRedirect: '/signup',
failureFlash : true
));
return router;
现在,没有显示任何路线。
有什么想法吗?
谢谢!
编辑:app.js
var express = require('express');
var path = require('path');
var favicon = require('static-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var swig = require('swig');
var dbConfig = require('./db.js');
var mongoose = require('mongoose');
mongoose.connect(dbConfig.url);
var routes = require('./routes/index');
var app = express();
// Configuring Passport
var passport = require('passport');
var expressSession = require('express-session');
app.use(expressSession(secret: 'mySecretKey'));
app.use(passport.initialize());
app.use(passport.session());
// view engine setup
app.engine('html', swig.renderFile);
app.set('view engine', 'html');
app.set('views', path.join(__dirname, 'views'));
// view cache
app.set('view cache', false);
swig.setDefaults( cache: false );
app.use(favicon());
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', routes);
/// catch 404 and forwarding to error handler
app.use(function(req, res, next)
var err = new Error('Not Found');
err.status = 404;
next(err);
);
/// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development')
app.use(function(err, req, res, next)
res.status(err.status || 500);
res.render('error',
message: err.message,
error: err
);
);
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next)
res.status(err.status || 500);
res.render('error',
message: err.message,
error:
);
);
module.exports = app;
【问题讨论】:
显示调用该模块的代码(即app.js) 我很欣赏这是一篇旧帖子,但如果你还在想:你分配 model.export 两次有什么原因吗?我是节点新手,所以也许它是合法的,但是从 js pov 看来,您正在覆盖初始 model.export 中的所有内容 我不记得为什么了,我认为这是一个简单的初学者错误,正如你所说的,这是一篇旧帖子:) 【参考方案1】:您的模块需要一个 passport
对象
module.exports = function(passport)
但您没有在 app.js 中使用护照对象调用它
var routes = require('./routes/index');
另外,您需要在调用路由模块之前定义护照。所以最后你需要修改你的 app.js 看起来像这样:
var passport = require('passport');
var expressSession = require('express-session');
app.use(expressSession(secret: 'mySecretKey'));
app.use(passport.initialize());
app.use(passport.session());
...
var routes = require('./routes/index')(passport);
...
app.use('/', routes);
【讨论】:
我的问题是护照不会验证 main.js 文件之外的任何路由。将护照参数添加到导出中效果很好。谢谢!以上是关于node.JS Express 护照路由的主要内容,如果未能解决你的问题,请参考以下文章
在 app.js 和路由 y node.js 之间共享一个对象