ejs模板无法正确呈现

时间:2015-04-13 07:40:47

标签: node.js passport.js ejs passport-local

我正在尝试复制使用passport来创建用户身份验证的教程。

每当我尝试在 signup.ejs 中包含以下代码段时:

<% if (message.length > 0) { %>
    <div class="alert alert-danger"><%= message %></div>
<% } %>

它抛出错误,一旦我从signup.ejs中删除它,它就会呈现。

下面是我的 app.js (包括所有配置), index.js (路由部分), signup.ejs
passport.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 routes = require('./routes/index');
var users = require('./routes/users');

var app = express();
var mongoose = require("mongoose");
var passport = require('passport');
var flash    = require('connect-flash');
var session = require('express-session');

mongoose.connect("mongodb://jer:jer@ds061611.mongolab.com:61611/passport1");
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

require('./config/passport')(passport);
app.use(logger('dev'));    
app.use(cookieParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, 'public')));

// required for passport
app.use(session({ secret: 'zxcv' })); // session secret
app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions
app.use(flash()); // use connect-flash for flash messages stored in session

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

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});
// 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: {}
  });
});

app.listen(8000);
module.exports = app;

index.js

var express = require('express');
var router = express.Router();
var passport = require('passport');
/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index.ejs', { title: 'Express' });
});

router.get('/signup', function(req, res) {

        // render the page and pass in any flash data if it exists
        res.render('signup.ejs');
    });

 // process the signup form
 console.log("entering signup");
 router.post('/signup', passport.authenticate('local-signup', {

        successRedirect : '/profile', // redirect to the secure profile section
        failureRedirect : '/signup', // redirect back to the signup page if there is an error
        failureFlash : true // allow flash messages
    }));    
router.get('/profile', isLoggedIn, function(req, res) {
    console.log("going to profile page.................................................................");
        res.render('profile.ejs', {
            user : req.user // get the user out of session and pass to template
        });
    });


function isLoggedIn(req, res, next) {

    // if user is authenticated in the session, carry on 
    if (req.isAuthenticated())
        return next();

    // if they aren't redirect them to the home page
    res.redirect('/');
}


module.exports = router;

signup.ejs

<!doctype html>
<html>
<head>
    <title>Node Authentication</title>
    <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap.min.css"> <!-- load bootstrap css -->
    <link rel="stylesheet" href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css"> <!-- load fontawesome -->
    <style>
        body        { padding-top:80px; }
    </style>
</head>
<body>
<div class="container">

<div class="col-sm-6 col-sm-offset-3">

    <h1><span class="fa fa-sign-in"></span> Signup</h1>


    <% if (message.length > 0) { %>
        <div class="alert alert-danger"><%= message %></div>
    <% } %>

    <!-- LOGIN FORM -->
    <form action="/signup" method="post">
        <div class="form-group">
            <label>Email</label>
            <input type="text" class="form-control" name="email">
        </div>
        <div class="form-group">
            <label>Password</label>
            <input type="password" class="form-control" name="password">
        </div>

        <button type="submit" class="btn btn-warning btn-lg">Signup</button>
    </form>

    <hr>    
</div>

</div>
</body>
</html>

passport.js (在以下链接:) https://scotch.io/tutorials/easy-node-authentication-setup-and-local

任何帮助都会帮助我完成本教程 提前谢谢。

1 个答案:

答案 0 :(得分:1)

最后,挖出错误......是一个非常简单和基本的错误。快乐我没有浪费别人的时间......
错误:渲染时我没有将变量传递给模板。
codeChange : 在 index.js / signup 路径
res.render('signup.ejs');更改为res.render('signup.ejs',{message:'errorMessage'});