3

Express 3 で記述されたサーバーがあり、テンプレート エンジンとして EJS を使用しています。ビューにセッション変数を表示する方法を知りたいです。

app.js /** * モジュールの依存関係。*/

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

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({secret : 'xvxcvxvcxvxcv'}));
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));


var ck_email = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
var ck_username = /^[A-Za-z0-9_]{1,20}$/;
var ck_password =  /^[A-Za-z0-9!@#$%^&*()_]{6,20}$/;

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', routes.index);
app.get('/users', user.list);

app.post("/Register",function(req, res){
    var username = req.body.username;
    var password = req.body.password;
    //var confirmpassword = req.body.confirmpassword;
    var email = req.body.email;
    var errors = [];

    if (!ck_email.test(email)) {
        errors[errors.length] = "Invalid email adress";
    }
    if (!ck_username.test(username)) {
        errors[errors.length] = "Invalid username .";
    }
    if (!ck_password.test(password)) {
        errors[errors.length] = "Invalid password ";
    }
    if (errors.length > 0) {
         req.session.response = "Erors Occured While Registration!";
         res.redirect('/Signup');
    }
    else{
        req.session.response = "Account Successfully Created";
        res.redirect('/Signup');
    } 
});

app.get("/Signup", function(req, res){
    res.render('Signup.ejs', {
        layout:false
    });
});

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

セッションが作成されました。firebug で確認できますが、ビューに表示する方法がわかりません。以下のように実行したところ、次のエラーが発生しました。

500 ReferenceError: C:\Users\user\workingFolder\views\Signup.ejs:27 25| <div> 26| <form action="/Register" method="post"> >> 27| <div class="error-message"><%= response %></div> 28| <label for="username">Username<b style="color:red;">*</b>:</label> 29| <input type="text" id="username" name="username"><br> 30| <label for="password">Password<b style="color:red;">*</b>:</label> response is not defined

ここに私のビューコードがあります:

....................
....................
<form action="/Register" method="post">
<div class="error-message"><%= response %></div>
                    <label for="username">Username<b style="color:red;">*</b>:</label>
                    <input type="text" id="username" name="username"><br>
                    <label for="password">Password<b style="color:red;">*</b>:</label>
                    <input type="password" id="password" name="password"><br>
                    <label for="confirmpassword">Confirm Password<b style="color:red;">*</b>:</label>
                    <input type="password" id="confirmpassword" name="confirmpassword"><br>
                    <label for="email">Email<b style="color:red;">*</b>:</label>
                    <input type="text" id="email" name="email"><br>
                    <input type="submit" value="Register">
                </form> 
................
................
4

1 に答える 1

8

デバッグ用のセッションを確認したい場合は、https ://github.com/devoidfury/express-debug の Express-debug ツールバーをお勧めします。

それ以外の場合は、req.session をテンプレート コンテキストに渡す必要があり、JSON として出力する可能性があります。

res.render('Signup.ejs', {
    layout:false,
    session: req.session
});

そしてあなたのテンプレートで:

<%= JSON.stringify(session) %>
于 2013-09-12T16:09:28.810 に答える