2

Node /Express3.0で遊んでいます。しかし、セッションを終了する方法がわかりません。特に、routes/session.jsで次のことを正しく行っているかどうかはわかりません。

app.use(function(req, res, next) {
  res.locals.session = req.session;
  next();
});

以下は詳細です。

私はapp.jsにこれを持っています

var express = require('express')
  , routes = require('./routes')
  , http = require('http')
  , path = require('path')
  ;

var app = express();

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.cookieParser('testtest'));
  app.use(express.session({
    secret: 'testtest',
    maxAge: 3600000
  }));
  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
});
...
require ('./routes/session')(app);
...
http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

そしてroutes/session.jsで

module.exports = function(app) {

  app.use(function(req, res, next) {
    res.locals.session = req.session;
    next();
  });

  app.get('/session/new', function(req, res) {
    res.render('session/new', {title: "Log in"});
  });

  app.post('/session', function(req, res) {
    if (users[req.body.username] && 
      users[req.body.username].password === req.body.password) {
        req.session.user = users[req.body.username];
        res.redirect('/users');
      } else {
        res.redirect('/session/new')
      }
  });

  app.del('/session', function(req, res, next) {
    req.session.destroy();
    res.redirect('/users');
  });

};

私はこれを視野に入れています。

- if (session.user) {

  p
    span Hello 
    span= session.user.name
    span= session
    span !
  p
    form(method="POST", action="/session")
      input(type="hidden", name="_method", value="DELETE")
      input(type="submit", value="Log out")

- } else {

  p
    a(href="/session/new") Login
    span  or 
    a(href="/users/new") Register

- }

ただし、これはセッションを取得せず、エラーが発生します。

1| > 2| - if (session.user) { 3| 4| p 5| span Hello  session is not defined
4

1 に答える 1

6

app.useミドルウェア アプローチが機能するには、ミドルウェアをインストールする呼び出しが への呼び出しの前に実行されていることを確認する必要がありますapp.use(app.router);。現在、呼び出しを介してrequire('./routes/session')(app);呼び出しています:

require ('./routes/session')(app);
app.use(app.router);

ミドルウェアなしでこれを行うには、res.render呼び出しを変更して、ビューで使用できるようにするローカルsession変数を渡します。

app.get('/session/new', function(req, res) {
  res.render('session/new', {title: "Log in", session: req.session});
});
于 2012-12-30T02:16:04.570 に答える