使用节点js和mongodb时出现多个连接错误

时间:2016-06-11 20:00:46

标签: javascript node.js mongodb mongoose

我正在使用/routes/schema.js文件中的以下架构...

var mongoose = require('mongoose');


var Schema = mongoose.Schema;

var userSchema = new Schema({
    username: String,
    password: String,
    name: String,
    last: String,
    year: Number,
    degree: String

});

var User = mongoose.model('User', userSchema);

module.exports = {
    User: User
}

在我的/routes/register.js文件中,我使用POST数据存储了一些信息......

var User = require('../routes/schema').User; 

exports.postRegister = function (req, res) {
    var u = new User({
        username: req.body.reg_username,
        password: req.body.reg_password,
        name: req.body.reg_name,
        last: req.body.reg_lastname,
        year: req.body.reg_year,
        degree: req.body.reg_degree
    });

    u.save(function (err) {
        if (err) {
            throw err;
        }
        else {
            console.log("saved");
            res.render('index', { title: 'Express' });

        }
    });
}

我的数据库中的一切都得到了很好的保存。但现在,此register.js文件会将用户重定向回/routes/index.js,然后用户必须使用存储在数据库中的某些凭据登录。

因此,在我的index.js文件中,我需要检查用户名和密码是否存在于我的数据库的集合中,我尝试了以下内容...

var User = require('../routes/schema').User; 

exports.signin = function (req, res) {
    User.findOne({
        username: req.body.log_username,
        password: req.body.log_password
    }, function (err, docs) {
        if (docs.length) {
            console.log("name exists");
        }
        else {
            console.log("no exist");
        }
    });
};

我使用findOne函数和相同的Schema来检查数据库中的集合中是否存在用户名和密码,但它无法正常工作。我似乎得到一个多连接错误,我不知道如何避免它。

当我尝试使用数据库中已有的某些凭据进行登录时,控制台会打印出no exist,表示已达到exports.signin中的else语句。

2 个答案:

答案 0 :(得分:1)

如果在集合中找不到该对象,则docs的值将为null

如果用户输入了错误的凭据,您将在空对象上调用docs.length,这将导致错误。请改用docs != null,以避免在length对象上调用null

答案 1 :(得分:0)

试试DateTime end = DateTime.Now.AddSeconds(100); DateTime now = DateTime.Now; Response.Write("TotalMinutes : " + (end - now).TotalMinutes); Response.Write("<br>Minutes : " + (end - now).Minutes); 这是检查文档字段是否存在或为空。