2017-05-06 157 views
0

我有一個Express應用程序如下:原因「類型錯誤:res.render不是一個函數」

var express = require('express'); 
var router = express.Router(); 
var passport = require('passport'); 
var User = require('../models/user'); 
var request = require('request'); 
var cheerio = require('cheerio'); 

//register 
router.post('/register', function(req, res){ 
    var username = req.body.username; 
    var password = req.body.password; 
    var studentID = req.body.studentID; 

    areCredentialsValid(username, password, function (statusBoolean) { 
     if (statusBoolean === true){ 
      User.register(new User({ 
       username: username, 
       password: password, 
       studentID: studentID 
     }), password, function(){ 
      console.log('Registered:'); 
      res.redirect('./'); 
      res.end() 
     }) 
    }else{ 
     console.log('Invalid Credentials:'); 
     res.redirect('./'); 
     res.end() 
     } 
    }); 
}); 

function areCredentialsValid(username, password, callback){ 
    if (typeof username !== 'undefined' && username !== null && username !== '' && 
     typeof password !== 'undefined' && password !== null && password !== ''){ 
     var cookie = {}; 
     var responseBoolean = false; 
     var config = { 
      method: 'GET', 
      url: 'https://parents.mtsd.k12.nj.us/genesis/j_security_check', 
      headers: { 
       'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 
       'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36' 
      } 
     }; 
     request(config, function (error, response, body) { 
      cookie = response.headers['set-cookie']; 
      //console.log(cookie); 
      var config = { 
       method: 'POST', 
       url: 'https://parents.mtsd.k12.nj.us/genesis/j_security_check', 
       form: { 
        'j_username': username, 
        'j_password': password 
       }, 
       headers: { 
        'Cookie': cookie, 
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36' 
       } 
      }; 
      request(config, function (error, response2, body) { 
       //console.log(response); 
       //console.log(response2.headers); 
       if (response2.headers['location'] === '/genesis/parents?gohome=true'){ 
       responseBoolean = true; 
       }else{ 
        responseBoolean = false; 
       } 
       callback(responseBoolean); 
       return responseBoolean; 
      }) 
     }) 
    } 
} 

//login 
router.post('/login', passport.authenticate('local', function(req, res) { 
    res.render('index', {title: 'Express'}); 
    console.log(req.user.username + ' has successfully logged in:'); 
})); 

module.exports = router; 

然而,問題是,當我運行這個應用程序,我得到的錯誤:​​。在閱讀了其他類似的問題之後,我推斷出這個問題很可能與我的res變量的範圍有關,但是,由於我沒有任何重複變量或任何其他問題,我沒有看到問題出現在哪裏在其他問題中提到。此外,我的視圖引擎已正確配置。所有幫助表示讚賞!

EDIT: ViewEngine setup

var express = require('express'); 
var path = require('path'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var mongoose = require('mongoose'); 
var User = require('./models/user'); 
var passport = require('passport'); 
var LocalStrategy = require('passport-local').Strategy; 
var index = require('./routes/index'); 

var app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 
+0

'res'是響應,你確定它有一個叫'render'的方法? –

+0

@ibrahimmahrir是的 – Markoe7

回答

0

問題只是一個錯字syntaxial。

router.post('/login', passport.authenticate('local'), function(req, res) { 
res.render('index', {title: 'Express'}); 
console.log(req.user.username + ' has successfully logged in:'); 
}); 
相關問題