EJS ビューでセッション変数にアクセスしようとしていますが、多くの問題に直面しています。
req.session にローカルでアクセスするには、こちらで説明されているようにミドルウェアを使用していますAccessing Express.js req or session from Jade template
var express = require('express');
var mongoose = require('mongoose');
var db = require('./models/db.js');
var routes = require('./routes/route.js');
var user = require('./routes/user.js');
var story = require('./routes/story.js');
var bodyParser = require('body-parser');
var session = require('express-session');
var cookieParser = require('cookie-parser');
mongoose.connect('mongodb://localhost/test');
var app = express();
app.use(function(req,res,next){
res.locals.session = req.session;
next();
});
app.set('view engine','ejs');
app.use(express.static(__dirname + '/public'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:false}));
app.use(cookieParser());
app.use(session({secret:"qazwsxedcrfvtgbyhnujm"}));
app.get('/',routes.home);
app.get('/register',routes.register);
app.post('/newUser',user.doCreate);
app.get('/login',routes.login);
app.post('/authenticate',user.login);
app.get('/new-story',routes.newStory);
app.post('/add-story',story.addStory);
app.get('/stories/:story',story.getStory);
app.post('/stories/:slug/saveComment',story.saveComment);
var port = process.env.PORT || 3000;
var server=app.listen(port,function(req,res){
console.log("Catch the action at http://localhost:"+port);
});
ホームルートを処理するための route.js は次のとおりです。
var mongoose = require( 'mongoose' );
var Story = mongoose.model( 'Story' );
exports.home=function(req,res){
Story.find({}, function(err,stories){
res.render('home',{stories:stories});
});
}
home.ejs では、ユーザー名プロパティが設定されているかどうかを確認して、ユーザーがログインしているかどうかを確認しています。
<% if( typeof(session.username) !== 'undefined' ) {%
<h1>Welcome</h1><%=session.username%>
<%}%>
しかし、メインページにアクセスすると 、未定義エラーのプロパティ 'ユーザー名' を読み取れないというエラーが表示されます
ユーザーが認証されると、セッションでユーザー名を設定しています。
exports.login=function(req,res){
var email=req.body.email;
var password=req.body.password;
User.findOne({email:email}, function(err,user){
if(err){
res.redirect("/login");
}
user.comparePassword(password,function(err,isMatch){
if(isMatch && isMatch==true){
console.log("Authentication Sucessfull");
req.session.username=user.username;
console.log("Got USer : "+req.session.username);
res.redirect("/");
}else{
console.log("Authentication UnSucessfull");
res.redirect("/login");
}
});
});
}