1

我正在尝试创建一个登录系统,管理员可以在其中登录并查看公众无法使用的数据。现在我只是想在我的数据库中找到我的管理实例。我有两个节点文件: app.jsaccount_manager.js

app.js

//creates node app
var express = require('express');
var app = express();
var mongoose = require('mongoose');
var AM = require('./account_manager');

//stuff...
/***************************************
LOGIN 
***************************************/
app.post('/login', function(req, res){

    AM.manualLogin(req.param('username'), req.param('password'), function(e, o){
        if (!o){
            res.send(e, 400);
        }   else{
            req.session.user = o;
            res.send(o, 200);
        }
    });
});

account_manger.js需要app.js并存储在 AM 中

account_manager.js

var express = require('express');
var app = express();
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost');


var admin_db = mongoose.connection; 

admin_db.on('error', console.error.bind(console, 'connection error: '));
//connection open?
admin_db.once('open', function callback(){
   console.log("User Database connection open!\n");
 });
var User_Schema = new mongoose.Schema({username: String, password: String});

var Admin = mongoose.model('Admin', User_Schema);

exports.manualLogin = function(user, pass, callback)
{
admin_db.find({username: user},function(err,docs){ //error is here
    if(docs){
        var x = 0;
        var flag = false;
        while(docs[x]){ //goes through all the admins
            if (docs[x].param("username") == user){ //if it's a match
                callback(null, docs);
                flag = true;
                break;
                }
            x+=1;
            }
        if (flag == false){
            callback('invalid-password/username');
            }
    }

});
}

我得到一个TypeError说:

Object #<NativeConnection> has no method 'find'

我的问题是什么?

4

2 回答 2

2

我自己对 node.js 还是很陌生,但无论如何我都会尝试回答。

看起来您已经通过 mongoose 正确地建立了与 mongodb 的连接,但您还没有创建模式。虽然 mongodb 没有模式,但 mongoose 有。

您需要做的是创建一个与用户集合中用户文档的构造相匹配的模式 (UserSchema),然后创建该模式 (User) 的实例,该实例现在是您的模型,然后在该模型上调用 .find .

Mongoose 快速入门指南经历了这个过程: http: //mongoosejs.com/docs/index.html

更新后编辑:

您当前正在调用 admin_db.find。这不存在。这是你得到的错误。

您需要将其更改为 Admin.find。您还需要了解区别是什么。

再次编辑:

您没有正确使用 admin_db.once 回调。

我建议您返回并重新阅读我链接的 Mongoose 快速入门指南。它很短,并且经历了所有这些。

于 2013-03-22T17:05:49.343 回答
2

我看到你在这里滚动你自己的系统,但我想我会分享一个到 Drywall 的链接,以防你能从中获得一些灵感或知识。

Drywall - Node.js 的网站和用户系统:http: //jedireza.github.io/drywall/

我希望这是有帮助的。如果遇到任何障碍,请随时在 GitHub 中打开问题。

于 2013-10-29T19:37:01.127 回答