【问题标题】:node.JS Express passport routingnode.JS Express 护照路由
【发布时间】: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 中的所有内容
  • 我不记得为什么了,我认为这是一个简单的初学者错误,正如你所说的,这是一篇旧帖子:)

标签: node.js mongodb express passport.js swig-template


【解决方案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 文件之外的任何路由。将护照参数添加到导出中效果很好。谢谢!
猜你喜欢
  • 2017-09-13
  • 2021-02-23
  • 1970-01-01
  • 2019-09-02
  • 2021-10-19
  • 1970-01-01
  • 2020-04-26
  • 2014-10-18
  • 2013-08-27
相关资源
最近更新 更多