如何从Express中获取Mongoose的数据?

时间:2016-12-24 06:54:50

标签: node.js mongodb express mongoose

我正在尝试使用Express从Mongoose获取一些数据。我已创建用户名和密码表单以登录我的网站。它应该检查凭据并让它们进入,如果凭据与存储在数据库中的凭据相同,但它允许任何内容(即使我输入了错误的密码)。我的源文件似乎很好,控制台没有丢失任何错误。文件的要点如下:

login.ejs

register.ejs

app.js文件(由于我的声誉,不能说出来):

var bodyParser = require('body-parser');
var express = require('express');
var mongoose = require('mongoose');


var app = express();

var options = {
    server: {
        socketOptions: {
            keepAlive: 300000, connectTimeoutMS: 30000
        }
    },
    replset: {
        socketOptions: {
            keepAlive: 300000,
            connectTimeoutMS : 30000
        }
    }
};

var db =    mongoose.connect('db_uri', options);

var Schema = mongoose.Schema;

var UserSchema = new Schema({
    email: String,
    password: String
});

var User = mongoose.model('Users', UserSchema);

app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.static(__dirname+'/public'));
app.set('view engine', 'ejs');
app.set('views', __dirname+'/public/templates');

app.get('/', function (req, res) {
    res.render('index');
});

app.get('/registerPage', function (req, res) {
    res.render('register') ;
});

app.get('/loginPage', function (req, res) {
    res.render('login');
});

app.post('/register', function (req, res) {
    var email = req.body.email;
    var password = req.body.password;
    var user = new User({
    email: email,
    password: password
});
    user.save(function (err) {
        if (err) throw err;
        console.dir(user);
        res.send('Account created successfully (email): ' + email);
     });
});

app.post('/login', function (req, res) {
    var email = req.body.email;
    var password = req.body.password;
    User.findOne( {email: email, password: password}, function (err) {
        if (err) throw err;
        res.render('portal');
    });
});

app.listen(3000, function () {
    console.log('Express server listening on http://localhost:3000');
});  

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

在登录处理程序中,您实际上并未检查查询是否与用户匹配。

也许您认为在这种情况下会设置err,但它不会成功,因为查询本身已成功执行(它只是没有返回任何记录)。

您需要添加额外的检查以查看查询是否返回了有效用户:

User.findOne( {email: email, password: password}, function (err, user) {
    if (err) throw err;
    if (! user) return res.send(401);
    res.render('portal');
});

当查询与用户不匹配时,这将返回401("未授权")。