2015-08-26 56 views
3

我想在Nodejs中管理会话,就像用户已经登录一样,将直接进入欢迎页面。我使用了一个单独的路由器模块,我试图访问请求参数来管理会话。我已经搜索并使用访问Nodejs中的请求参数

req.params

req.body

req.query

访问UNAME参数在我的HTML文件。我得到的所有是undefined

我也尝试了URL模块,但没有运气。请尽量彻底,因为我是Nodejs的初学者。

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
    <meta charset="UTF-8"> 
    <title>{{title}}</title> 
     <link rel="stylesheet" href="../CSS/style.css"> 
    </head> 
    <script type="text/javascript"> 
     function validate(){ 

      var username = document.getElementById("username").value; 
      var password = document.getElementById("password").value; 
      if (username == "[email protected]" && password == "admin123"){ 
       return false; 
      } 
      else { 
       alert ("Login Failed"); 

      } 
     } 
    </script> 
    <body> 

    <div class="container"> 

    <div id="login-form"> 

    <h3>Login</h3> 

    <fieldset> 

     <form > 

     <input type="email" id="username" name="uname"> 

     <input type="password" id="password" > 
     <a href ="/welcome"> Welcome </a> 
     <input type="submit" value="Login" onclick="return (validate())" /> 

     <footer class="clearfix"> 

      <p><span class="info">?</span><a href="#">Forgot Password</a></p> 

     </footer> 

     </form> 

    </fieldset> 

    </div> <!-- end login-form --> 

</div> 

    </body> 
</html> 

app.js

var express = require('express'), 
    app = express(); 
    path = require('path') 
    cookieParser = require('cookie-parser') 
    session = require('express-session') 
    config = require('./config/config.js'); 
    connectMongo = require('connect-mongo')(session) 
    mongoose = require('mongoose').connect(config.dbURL) 

app.set('views', path.join(__dirname, 'views')); 
app.engine('html', require('hogan-express')); 
app.set('view engine', 'html'); 
app.use(express.static(path.join(__dirname, 'public'))); 
app.use(cookieParser()); 
var env = process.env.NODE_ENV || 'development'; 

if(env==='development'){ 
    app.use(session({secret:config.sessionSecret, saveUninitialized:true, resave:true})); 
} else { 
    app.use(session({ 
     secret:config.sessionSecret, 
     store: new connectMongo({ 
      //url:config.dbURL, 
      mongooseConnection:mongoose.connections[0], 
      stringify:true 
     }), 
     saveUninitialized:true, 
     resave:true 
    })) 
} 

/* 
app.route('/').get(function(req, res, next){ 
    //res.send('<h1>Hello World!</h1>'); 
    res.render('login', {title:'Welcome to AIOCloud'}); 
}) 

OR 

require('./routes/routes.js')(express, app, session); 
*/ 

var userSchema = mongoose.Schema({ 
    username:String, 
    password:String, 
    fullname:String 
}) 

var person = mongoose.model('aiocloud', userSchema); 

var john = new person({ 
    username:'johndoe', 
    password:'john_wants_to_login', 
    fullname:'John Doe' 
}) 

john.save(function(err){ 
    console.log('Done !'); 
}); 

require('./routes/routes.js')(express, app); 

app.listen(3000, function(){ 
    console.log('AIOCloud Working on Port 3000'); 
    console.log('Mode: ' + env); 
}) 

routes.js

module.exports = function(express, app){ 
    var router = express.Router(); 
    var bodyParser = require('body-parser') 
    var ses; 

    app.use(bodyParser.json()); 
    app.use(bodyParser.urlencoded({extended:true})); 

    router.get('/', function(req, res, next){ 
     res.render('login.html');  
    }); 

    router.get('/login', function(req, res, next){ 
     ses = req.session; 

     if(ses.uname) 
      res.redirect('/welcome'); 
     else{ 
      ses.uname = req.params.uname; 
      console.log(ses.uname); 
      res.redirect('/welcome'); 
     } 
    }); 

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

     if(ses.uname){ 
      //console.log(ses.id); 
      res.render('welcome', {title:'Welcome'}); 
     } 
     else 
      res.render('login.html'); 
    }); 

    router.get('/setcolor', function(req, res, next){ 
     req.session.favColor = "Red"; 
     res.send('Setting favourite color!'); 
    }); 

    router.get('/getcolor', function(req, res, next){ 
     res.send('Favourite color is ' + (req.session.favColor===undefined?"Not Found":req.session.favColor)) 
    }); 

    app.use('/', router); 
} 

回答

0
var bodyParser = require('body-parser') 

// parse application/x-www-form-urlencoded 
app.use(bodyParser.urlencoded({ extended: false })) 

// parse application/json 
app.use(bodyParser.json()) 

请使用https://github.com/expressjs/body-parser

+0

不介意我的问题,但是我的html文件有什么问题,因为我没有看到任何请求参数像httt:// localhost:3000 /?uname = slsll – user101285

+0

它只是http:// localhost:3000/ – user101285

0

ses.uname是不确定的,因为你不发送任何数据从页面。

当您尝试设置ses.uname这样的:

ses.uname = req.params.uname;

你错过,你必须做像POST请求有一定的要求,从HTML页面的Node.js服务器,并在这个职位必须有一些数据传递的参数信息(uname):

$.post("/login",{uname: username},function(data){   
    // do some stuff when post is completed 
}); 

那么你设置req.params.uname变量,然后设置会话参数uname。

试试这个,祝你好运!

+1

感谢您的建议并添加了一些额外的代码。 – user101285

+0

好!我很乐意帮助你! –