我正在尝试创建一个登录系统,管理员可以登录并查看公众无法使用的数据。现在我只是想在我的数据库中找到我的管理员实例。我有两个节点文件:app.js
和account_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'
我的问题是什么?
答案 0 :(得分:2)
我自己对node.js还不熟悉,但无论如何我都会尝试回答。
看起来您已通过mongoose正确构建了与mongodb的连接,但您尚未创建架构。虽然mongodb没有架构,但是mongoose会这样做。
您需要做的是创建一个与用户集合中用户文档的构造相匹配的模式(UserSchema),然后创建该模式的实例(User),该模式现在是您的模型,然后调用.find在那个模型上。
“猫鼬快速入门”指南经历了以下过程: http://mongoosejs.com/docs/index.html
更新后编辑:
您当前正在调用admin_db.find。这不存在。这是你得到的错误。
您需要将其更改为Admin.find。您还需要了解其中的区别。
再次编辑:
您没有正确使用admin_db.once回调。
我建议你回去重新阅读我链接的Mongoose快速入门指南。这很短,并且经历了所有这些。
答案 1 :(得分:2)
我看到你在这里推出了自己的系统,但我想我可以与干墙共享一个链接,以防你从中获得灵感或知识。
Drywall - Node.js的网站和用户系统:http://jedireza.github.io/drywall/
我希望这会有所帮助。如果遇到任何障碍,请随时在GitHub中打开问题。