在node / mongodb / express中创buildlogin系统。 无法连接到数据库
我正在尝试创build一个login系统,pipe理员可以login并查看公众无法获取的数据。 现在我只是想在我的数据库中find我的pipe理员实例。 我有两个节点文件: 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); } }); });
在app.js
需要account_manger.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'); } } }); }
我得到一个types错误,说:
Object #<NativeConnection> has no method 'find'
我的问题是什么?
我自己对node.js还是比较新的,但我会尽力回答。
看起来你已经通过mongoose正确地build立了与MongoDB的连接,但是你还没有创build一个模式。 虽然mongodb没有图式,但是mongoose会这样做。
你需要做的是创build一个与用户集合中的用户文档的构造匹配的模式(UserSchema),然后创build一个现在是你的模型的模式(User)的实例,然后在该模型上调用.find 。
“mongoose快速入门”指南通过以下过程: http : //mongoosejs.com/docs/index.html
更新后编辑:
您目前正在呼叫admin_db.find。 这不存在。 这是你得到的错误。
您需要将其更改为Admin.find。 你也需要明白有什么不同。
再次编辑:
您没有正确使用admin_db.oncecallback。
我build议你回去重读一下我链接的Mongoose Quick Start指南。 这是相当短的,经历了所有这一切。
我看到你在这里滚动你自己的系统,但我想我会分享一个石膏板的链接,以防你可以从中获得一些灵感或知识。
石膏板 – Node.js的网站和用户系统: http : //jedireza.github.io/drywall/
我希望这是有帮助的。 如果遇到任何路障,请随时在GitHub中打开问题。