2017-05-11 12 views
2

私はexpress.jsアプリケーションのセッションをMozilla’s client-sessionsで実装しています。何か助けが必要です。ルータのミドルウェア機能を呼び出す

ReferenceError: requireLogin is not defined

//index.js(ルータ)

var express = require('express') 
 
    , router = express.Router() 
 
    , user = require('../public/js/models/test.js'); 
 

 

 

 
router.get('/profile-header', requireLogin, function (req, res, html) { 
 
    console.log(req.session); 
 
    res.render('templates/profile-header.jade', { title: 'Default' }) 
 
}); 
 

 

 
router.get('/sign-in', function (req, res, html) { 
 
    res.render('templates/sign-in.jade', { title: 'Sign In' }) 
 
}); 
 

 

 
router.get('/blog-home', requireLogin, function (req, res, html) { 
 
    res.render('templates/blog-home.jade', { title: 'Blog' }) 
 
}); 
 

 

 
router.get('/logout', function(req, res) { 
 
    req.session.reset(); 
 
    res.redirect('/'); 
 
}); 
 

 

 
router.post('/profile-header', function (req, res, html) { 
 
    user.login(req.body, function (e, o) { 
 
    if (o) { 
 
     //add session 
 
     req.session.user = o; 
 
     res.redirect('/profile-header'); 
 
    } else { 
 
     res.render('templates/sign-in.jade', { error: 'Invalid email or password.' }); 
 
    } 
 
    }); 
 
}); 
 

 
module.exports = router;
:私は、私はそれを実行したとき、私はこのエラーを取得し、私のポストと私のrouter.jsでGEST要求とapp.jsでミドルウェアを持っています

//app.js

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 stylus = require('stylus'); 
 
var bcrypt = require('bcrypt'); 
 
var should = require('should'); 
 
var session = require('client-sessions'); 
 

 
var index = require('./routes/index'); 
 
var users = require('./routes/users'); 
 
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'))); 
 
function requireLogin (req, res, next) { 
 
    if (!req.user) { 
 
    console.log("pd"); 
 
    res.redirect('/sign-in'); 
 
    } else { 
 
    next(); 
 
    } 
 
}; 
 

 

 
app.use(session({ 
 
    cookieName: 'session', 
 
    secret: 'random_string_goes_here', 
 
    duration: 30 * 60 * 1000, 
 
    activeDuration: 5 * 60 * 1000, 
 
})); 
 

 
app.use(logger('dev')); 
 
app.use(bodyParser.urlencoded({ extended: true })); 
 
app.use(bodyParser.json()); 
 
app.use(cookieParser()); 
 
app.use(stylus.middleware(path.join(__dirname, 'public'))); 
 
app.use(express.static(path.join(__dirname, 'public'))); 
 
app.use(function(req, res, next) { 
 
    res.header("Access-Control-Allow-Origin", "*"); 
 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
 
    next(); 
 
}); 
 

 
app.use('/', index); 
 
app.use('/users', users); 
 

 

 
app.use(function(req, res, next) { 
 
    if (req.session && req.session.user) { 
 
    user.exist(req.session.username, function (e, o) { 
 
     if (user) { 
 
     req.user = user; 
 
     delete req.user.user_password; // delete the password from the session 
 
     req.session.user = user; //refresh the session value 
 
     console.log(req.session); 
 
     res.locals.user = user; 
 
     } 
 
     // finishing processing the middleware and run the route 
 
     next(); 
 
    }); 
 
    } else { 
 
    next(); 
 
    } 
 
}); 
 
// listener 
 
app.listen(process.env.PORT || 3000, function() { 
 
\t console.log('Listening on http://localhost:' + (process.env.PORT || 3000)) 
 
}) 
 

 
module.exports = app;

あなたの助けにThx!

答えて

1

requireLoginはで定義されていますが、index.jsでは定義されていません。

// auth.service.js 
exports.requireLogin = function (req, res, next) { ... }; 

次にindex.jsでこれを追加します:

var Auth = require('./auth.service'); 

.... 

router.get('/profile-header', Auth.requireLogin, function (req, res, html) { 
    console.log(req.session); 
    res.render('templates/profile-header.jade', { title: 'Default' }) 
}); 
+0

[OK]をTHXは、私はそれを呼び出す必要はありません 私は必要なときにそれを必要と/外部サービスとインポートでrequireLoginを移動することをお勧めしたいですapp.js thoで?それが正常に機能していたのは、関数とすべてのget/postがapp.jsにあったときだけでした。 –

+0

私はあなたから見て、あなたは 'app.js'でそれを呼び出さないと言います。それはちょうどそこに宣言されています。したがって、外部サービスに移動すると、そのサービスを 'app.js'から削除することができます。 – rkm

+0

私はリクエストがうまくいって、私のユーザー情報を取得しますが、その後requireLogin(ログインが成功した場合は想定されているものではありません)によってログインページにリダイレクトされています。なぜ分からないのですか...助けてくれてありがとう! –

関連する問題