2017-11-01 7 views
0

以下のコードでは、ユーザが私のmongoデータベースの詳細を入力するユーザ名とパスワードを認証しています。成功した場合は、/ mainルート(index.ejs)にリダイレクトします。私はエラーが発生しています: - コールバックは関数ではありません。 私はnodejsを初めて使っています。私はどこで、なぜこのエラーが出るのか理解できません。Nodejs:コールバックは関数ではありません

app.js

var express = require('express'); 
    var app = express(); 
    var path = require('path'); 
    var favicon = require('serve-favicon'); 
    var logger = require('morgan'); 
    var cookieParser = require('cookie-parser'); 
    var bodyParser = require('body-parser'); 
    var urlencoder = bodyParser.urlencoded({extended : true}); 
    var MongoClient = require('mongodb').MongoClient; 
    var url = 'mongodb://<username>: <password>@ds141434.mlab.com:41434/teacherspro'; // using mLab 
    app.set('view engine' , 'ejs');   // ejs as view engine 

var index = require('./routes/index'); // providing routes 
var users = require('./routes/users'); 

app.set('views', path.join(__dirname, 'views')); 


app.use(logger('dev')); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use('/main', index);  
app.use('/users', users); 


app.get('/login' , function(req,res,next){ // rendering homepage 
    console.log('\r');  
    res.render('login'); // rendering login.ejs 
    console.log('rendered master page!'); 
    next(); 
}); 

MongoClient.connect(url , function(err,db){ 
    if (err) return; 

    app.post('/login' , urlencoder , function(req,res,next){ 
     app.use(bodyParser.json()); 

    var UserName = req.body.UserName; 
    var Password = req.body.Password; 

    db.collection('project1').find({ '$and' : [ {"UserName" : UserName} , {"Password" : Password} ]} , {_id : 0}).forEach(function(pes){ // authenticating username and password 

     if(true) 
      { 
       console.log(pes); 
       res.redirect('/main'); 
      } 
     }); 
    }); 
    db.close(); 
    next(); 
}); 

app.listen(5050);  
module.exports = app; 

Index.js

var express = require('express'); 
var router = express.Router(); 

router.get('/', function(req, res) { 
    MongoClient.connect(url , function(err,db){ 
     if (err) return; 
     db.collection('project1').find({"UserName" : "karan"} , {_id : 0}).forEach(function(pes){ 
      console.log(pes); 
      res.render('index', {Name : pes}); 
     }); 
    }); 
}); 

module.exports = router; 

login.ejs

<form id = 'login' method = POST action = '/login'> 
     <label for = 'Username'> UserName </label> 
     <input type = 'text' name = 'UserName' value = ''> 
     <br /> 
     <label for = 'Password'> Password </label> 
     <input type = 'password' name = 'Password' value = ''> 
     <br /> 
     <center> <input type ="submit" value = "submit" /> </center> 
     <br /> 
</form> 
+1

エラーが発生しているのは、どのラインですか?スタックトレースを投稿できますか? – styfle

+0

最初のスクリプトには 'logger'または' cookieParser'変数はありません – MinusFour

+0

が追加されました。それでも動作しません。 –

答えて

-1

ポストコールバックの形式は次のとおりです。 app.post(path、callback);

docsを確認してください。 app.post

urlencoder paramを削除するだけです。

+0

その情報を投稿できません。エラー:「UserNameが定義されていません」 –

+0

次のミドルウェアが実行されないように、インデックスミドルウェアにnext()がありません。したがって、app.postはまったく実行されません。 – Vitiok

+0

私はユーザーのミドルウェアのコードが表示されないので、おそらくあなたもnext()を追加する必要があります。 – Vitiok

関連する問題