2017-08-17 82 views
1

我試圖構建一個快速應用程序,但現在我卡在登錄過程。我不確定它與我遇到的問題有什麼關係,但是我的學校分配說我必須使用passport.js來創建登錄表單。Express.js和passport.js,但無法獲得/登錄

所以,我遇到的問題是,每次我試圖使我的網頁在我的瀏覽器在localhost:3000 /登錄我得到這個消息:

CANNOT GET /login 

可能有更多的問題,我的代碼,但由於我已經得到這個錯誤,所以不可能找出答案。

我的默認應用程序文件:

const express = require('express'); 
const app = express(); 

app.listen(3000,() => { 
    console.log('Example listening on port 3000!') 
}); 

const loginRoute = require('./routes/logins.js'); 

app.use('/login', loginRoute); 

const passport = require('passport') 
    , LocalStrategy = require('passport-local').Strategy; 

passport.use(new LocalStrategy(
    function(username, password, done) { 
     User.findOne({ username: username }, function(err, user) { 
      if (err) { return done(err); } 
      if (!user) { 
       return done(null, false, { message: 'Incorrect username.' }); 
      } 
      if (!user.validPassword(password)) { 
       return done(null, false, { message: 'Incorrect password.' }); 
      } 
      return done(null, user); 
     }); 
    } 
)); 

module.exports = app; 

我的路徑/文件登錄:

const express = require('express'); 
const router = express.Router(); 
const pug = require('pug'); 

const login = pug.compileFile('views/login.pug'); 

router.get('/login', function(req, res, next) { 
    res.render('login', { title: 'Login' }); 
}); 

const passport = require('passport'); 

router.post('/login', 
    passport.authenticate('local', { successRedirect: '/', 
     failureRedirect: '/login', 
     failureFlash: true }) 
); 

module.exports = router; 

我的意見/ login.pug文件:

doctype html 
html 
    head 
    body 
     h1 #{title} 
     form(action='/login', method='post') 
      div 
       label Username: 
       input(type='text', name='username') 
      div 
       label Password: 
       input(type='password', name='password') 
      div 
       input(type='submit', value='Log In') 

如果有人可以幫助我這,我會非常感謝。

+1

你可以嘗試移動'app.listen'塊略高於'module.exports =應用;' – XPLOT1ON

回答

1

因爲你是你的路由器安裝到路徑/login,然後在你的路由器,你必須:

router.get('/login', function(req, res){...}) 

快遞將評估作爲localhost:3000/login/login

在路由器文件的路徑應該是relavtive到您在其上安裝的路徑。因此,對於localhost:3000/loginlogins路由器應該是這樣的

router.get('/', function(req, res){...}) 
//and 
router.post('/', function(req, res){...})