0

私はnodejsに非常に慣れていないので、ここで何が起こっているのか正確に理解できません。基本的なログインページがあり、ユーザーが値を入力するとホームページに移動し、その前にチェックします。そのユーザー名が存在するかどうかにかかわらず、データベース。私が抱えている問題は、送信ボタンをクリックしたときに、コードがデータベース機能に到達していないように見えることです。
これはapp.jsの私のモジュールです-

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からのperform_loginです-

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);
        }
    });
}

これは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()の外でデータベースにアクセスすることができます。
コールバックに何か問題がありますか?

4

1 に答える 1

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) {
        ...
    });
});
于 2013-02-22T22:33:58.793 に答える