如何在登录后将用户发送到另一个页面(节点js)

时间:2016-06-26 19:56:17

标签: javascript node.js

我有以下代码检查数据库中是否存在用户......

router.post('/', function (req, res) {

    User.findOne({
        username: req.body.log_username,
        password: req.body.log_password
    }, function (err, docs) {
        if (docs.length !== 0) {
            console.log("user exists");

        }
        else {
            console.log("no exist");
        }
    });

});

如果登录成功,我有一个主页要发送给用户。我应该在if语句中放置什么来将用途发送到另一个页面,在本例中为home.jshome.js中包含以下代码......

var express = require('express');
var router = express.Router();

router.get('/', function (req, res) {
    res.render('home', { title: 'Express' });
});

module.exports = router;

4 个答案:

答案 0 :(得分:4)

您需要将用户重定向到主页面。的 res.redirect('path')

参考:http://expressjs.com/en/4x/api.html#res.redirect

router.post('/', function (req, res) {

    User.findOne({
        username: req.body.log_username,
        password: req.body.log_password
    }, function (err, docs) {
        if (docs.length !== 0) {
            console.log("user exists");
            res.redirect('/'); // main page url
        }
        else {
            console.log("no exist");
            res.redirect('/login');
        }
    });

});

答案 1 :(得分:1)

Mongoose findOne会将1个对象作为result其他null返回。
无需检查docs.length > 0
手册:http://mongoosejs.com/docs/api.html#query_Query-findOne

还添加了req.session.user = result也许您需要它来检查用户是否经过身份验证(在中间件功能中,以防止直接访问内部路由。

router.post('/', function (req, res) {
    User
      .findOne({
        username: req.body.log_username,
        password: req.body.log_password
      })
      .exec(function (err, result) {
        if(result) { // auth was successful
          req.session.user = result; // so writing user document to session
          return res.redirect('/'); // redirecting user to interface
        }

        // auth not successful, because result is null
        res.redirect('/login'); // redirect to login page
    });
});

答案 2 :(得分:1)

在中间件中的某处将originalUrl存储到会话:

req.session.returnTo = req.originalUrl;

然后将successRedirect更改为successReturnToOrRedirect参数:

app.post('/login', passport.authenticate('local-login', {
     successReturnToOrRedirect: '/dashboard', // redirect to the secure profile section
     failureRedirect: '/login?Failed', // redirect back to the signup page if there is an error
     failureFlash: true // allow flash messages
}));

答案 3 :(得分:0)

你想要像

这样的东西

res.redirect('/');

在你的POST中" /"。

示例:

    if (docs.length !== 0) {
        console.log("user exists");
        res.redirect('/');
    }