2013-03-22 3 views
1

관리자가 로그인하여 일반 사용자가 사용할 수없는 데이터를 볼 수있는 로그인 시스템을 만들려고합니다. 지금은 데이터베이스에서 내 관리자 인스턴스를 찾으려고합니다. app.jsaccount_manager.js노드/mongodb/express에 로그인 시스템 생성. 데이터베이스에 연결할 수 없습니다.

//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.jsapp.jsapp.js에 필요하며

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' 

내 문제는 무엇입니까?

답변

2

나는 node.js에 대해 아직 완전히 익숙하지 않지만 어쨌든 시도하고 대답 할 것입니다.

mongoose를 통해 mongodb에 대한 연결을 제대로 구축 한 것처럼 보이지만 스키마를 만들지 않았습니다. mongodb에는 스키마가 없지만 mongoose는 스키마를 가지고 있지 않습니다.

사용자 컬렉션에서 사용자 문서의 구성과 일치하는 스키마 (UserSchema)를 만든 다음 모델 인 해당 스키마 (사용자) 인스턴스를 만든 다음 호출하십시오. 그 모델을 찾아라.

몽구스 빠른 시작 가이드는이 과정을 통해 진행됩니다 http://mongoosejs.com/docs/index.html

편집 업데이트 후 : 당신은 admin_db.find를 호출

합니다. 존재하지 않습니다. 이것은 당신이 받고있는 오류입니다.

Admin.find로 변경해야합니다. 그 차이점을 이해해야합니다.

편집 한 번 더 : 당신은 제대로 admin_db.once 콜백을 사용하지

.

당신이 돌아가서 몽구스 빠른 시작 가이드를 다시 읽어 보길 권한다. 이것은 매우 짧으며이 모든 것을 통과합니다.

+0

답장을 보내 주셔서 감사합니다. 내 'account_manager.js'에 스키마가 포함되어 있습니다. 그냥 포함시키지 않기로 결정했습니다. 포함하도록 수정했습니다. – tausch86

+0

내 대답이 변경 사항을 반영하도록 변경되었습니다. – phairoh

+0

어리석은 실수 였어. 추적 해 주셔서 감사합니다! – tausch86

2

나는 여기에 자신의 시스템을 굴러 다니는 것을 보았지만, 마른 벽에서 나온 벽으로 연결되는 링크를 공유한다고 생각했다.

마른 벽에서 나온 - Node.js를위한 웹 사이트 및 사용자 시스템 : http://jedireza.github.io/drywall/

나는이 도움이되기를 바랍니다. 도로 블록을 만날 경우 GitHub에서 문제를 열어보십시오.

관련 문제