2013-02-22 67 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 

在終端我只能得到 - 「在家裏」,之後什麼也沒有發生。在瀏覽器中,它似乎正在處理,但仍然在登錄頁面。
當我運行帶有實際硬編碼值而不是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 2013-02-23 19:47:16