简体   繁体   中英

Accessing request parameters in Nodejs

I am trying to manage session in Nodejs like if user is already logged in, will be taken directly to welcome page. I have used a separate Router module in which I am trying to access request parameters to manage sessions. I have searched and used

req.params

req.body

req.query

to access uname parameter in my html file. All I am getting is undefined

I have also tried the URL module but no luck. Please try to be thorough as I am beginner in 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 == "admin@gmail.com" && 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);
}
var bodyParser = require('body-parser')

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

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

Please use https://github.com/expressjs/body-parser

ses.uname is undefined because you don't send any data from the page.

When you try to set ses.uname like this:

ses.uname = req.params.uname;

you miss that you must do some request like post request from html page to node.js server and in this post you must pass a parameter (uname) with some data:

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

then your req.params.uname variable is setted and then session parameter uname is setted.

Try this and good luck!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM