2013-02-22 3 views
0

저는 nodejs를 처음 접했고 정확히 무슨 일이 일어나는지 알아낼 수 없습니다. 사용자가 값을 입력 할 때 기본 로그인 페이지가 있습니다. 홈 페이지로 이동하십시오. 그 전에 사용자 이름이 존재하는지 여부를 확인하기 위해 데이터베이스를 확인합니다. 문제는 내가 제출 버튼을 클릭하면 코드가 데이터베이스 기능에 도달하지 못하는 것입니다.
이는 app.js 내 모듈 -nodejs를 사용하여 데이터베이스에 연결할 수 없습니다.

app.post('/home',function(req,res){ 
     //check for user existence.... 
     var str; 
     console.log("in home"); 
     user_login.perform_login(req.body.username,function(err,str){ 
      if(!err){ 
       console.log(str+" in login"); 
       var cookie_val=req.body.username; 
       res.cookie('username',cookie_val,{signed: true}); 
       req.session.username=cookie_val; 
       res.render('home.ejs',{ 
        layout: false, 
        locals: {varname: cookie_val}, 
        udata: req.session.username 
       }); 
      } 
      else{ 
       console.log("Couldn't find it."); 
       res.redirect("/login"); 
      } 
     }); 
}); 

이 user_login.js-

var mongo_db=require("./testdb.js"); 
exports.perform_login=function (username,callback){ 
    mongo_db.getInfo(username,function(err,bundle){ 
     if(!err){ 
      //console.log("success\n"+bundle); 
      callback(false,bundle); 
     } 
     else{ 
      //console.log("couldn't find it"); 
      callback(true,null); 
     } 
    }); 
} 

에서 perform_login이며, 이는 testdb.js-

var mongoose=require('mongoose'); 
mongoose.connect('mongodb://localhost/test'); 
exports.getInfo=function(value,callback){ 
    var db=mongoose.connection; 
    db.on('error',console.error.bind(console,'connection error:')); 
    db.once('open',function(){ 
     console.log("Connected!"); 
     var userSchema=mongoose.Schema({ 
      username:  String, 
      password: String 
     }); 
     var userInstances=mongoose.model('userInstances',userSchema); 
     userInstances.findOne({username: value},'username password',function(err,ui){ 
           if(!err){ 
            callback(false,ui); 
           } 
           else{ 
            callback(true,"error"); 
           } 
          });//findone 

    });//db.once function 
}//getinfo 

에 터미널 i는 "집안에"서만 도착하는데, 그 후에는 아무 일도 일어나지 않습니다. 브라우저에서는 처리 중이지만 로그인 페이지에 남아 있습니다.
req.body.username 대신 실제 하드 코드 된 값으로 perform_login을 실행할 때 app.js가 실행되면 바로 적절한 결과를 얻습니다. 그래서 어떻게 든 app.post() 외부에서 데이터베이스에 액세스 할 수 있습니다.
콜백에 문제가 있습니까?

답변

1

나는 여기서 너무 많이하고 있다고 생각한다. 당신이 묘사하는 증상은 연결된 경험이없는 몽구스의 경험입니다. 연결된 경우 연결을 관리하고 이벤트를 수신 할 필요가 없습니다. 몽구스가 이것을 처리합니다. 모델을 쿼리하면 연결이 설정되는 즉시 결과가 반환됩니다.

app.js 
//initialize mongo connection 
var mongooseConnection = mongoose.connect("mongodb://localhost/test"); 


user.js 
var mongoose = require('mongoose'); 
var userSchema=mongoose.Schema({ 
    username:  String, 
    password: String 
}); 

userSchema.statics.performLogin = function(username, callback) { 
    this.findOne({username: value},'username password',function(err,user){ 
    if(!err){ 
     callback(false,user); 
    } 
    else{ 
     callback(true,"error"); 
    } 
}); 

module.exports = mongoose.model('users',userSchema); 


route: 
var User = require("./user"); 
app.post('/home',function(req,res){ 
    User.performLogin(req.body.username, function (err, user) { 
     ... 
    }); 
}); 
+0

이 일 :

여기에 작동합니다 예입니다! 감사 – Kamehameha

관련 문제