首页 文章

Mongoose FindOne方法总是返回'null'

提问于
浏览
1

我正在努力使我的快速应用程序使用MongoDb,使用mongoose .

这是代码(编辑后):

var express = require('express');
var router = express.Router();
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var UserSchema = new Schema({
    username: String,
    password: String
});
var Users = mongoose.model('Users', UserSchema);
/* GET admin page. */
router.get('/', function(req, res, next) {
    res.render('admin/admin', {
        title: 'Admin'
    });
});

router.post('/login', function(req, res, next) {
    console.log(req.body.username);
    Users.findOne({
        username: req.body.username
    }, function(err, user) {
        console.log('Error: ' + err, user);
    });
    // console.log(req.body.username, req.body.password);
    // passport.authenticate('local', {
    //     successRedirect: '/',
    //     failureRedirect: '/admin'
    // });
});
module.exports = router;

我的问题是我在我的收藏中找不到用户 . 我已经尝试使用多种字符串格式(大小写或不大写)来指定一个集合名称,因为您可以在同一个子喷射点上看到并喜欢其他帖子的答案 .

findOne()方法总是通过错误回调,即使文档正确添加到集合中也是如此 .

如果有人有想法或什么的话!

非常感谢 !

EDIT :

在你的建议之后,我更新了代码以获得更符合逻辑的代码 .

在我的MongoLab Users 集合中,我有一个这样的文档:

{
    "_id": {
        "$oid": "5641e9a1e4b0af6681f0bef1"
    },
    "username": "admin",
    "password": "admin"
}

POST 数据之后,"admin"完全是用户名,mongoose查询返回:

web.1  | admin                // req.body.username
web.1  | Error: null null     // findOne() error callback

mongoDB操作仅在 ./routes/admin.js 中, moongose.connection 仅在 ./index.js 中发生 . 我对模块概念不太满意......

1 回答

  • 0

    为了能够运行查询,您必须首先创建模型:

    var schema = new mongoose.Schema({
    username: String,
    password: String});
    var Users = mongoose.model('Users-CollectionName', schema);
    

    然后像你一样查询你的数据库 .

    Users.findOne({
        username: req.body.username
    }, function(err, user) {
        console.log('Error: ' + err, user);
    });
    

相关问题