Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Express.js和passport.js,但无法获取/登录_Javascript_Node.js_Pug_Passport.js - Fatal编程技术网

Javascript Express.js和passport.js,但无法获取/登录

Javascript Express.js和passport.js,但无法获取/登录,javascript,node.js,pug,passport.js,Javascript,Node.js,Pug,Passport.js,我正在尝试构建一个express应用程序,但现在我被困在登录过程中。我不确定这和我遇到的问题有什么关系,但我的学校作业说我必须使用passport.js来制作登录表单 因此,我遇到的问题是,每次我试图在localhost:3000/login上的浏览器中呈现我的页面时,我都会收到以下消息: CANNOT GET /login 我的代码可能还有更多的问题,但因为我已经得到了这个错误,所以不可能找到答案 我的默认应用程序文件: const express = require('express');

我正在尝试构建一个express应用程序,但现在我被困在登录过程中。我不确定这和我遇到的问题有什么关系,但我的学校作业说我必须使用passport.js来制作登录表单

因此,我遇到的问题是,每次我试图在localhost:3000/login上的浏览器中呈现我的页面时,我都会收到以下消息:

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')

如果有人能帮我,我将非常感谢。

因为您正在将路由器安装到路径
/login
,然后在路由器中您有:

router.get('/login', function(req, res){...})
Express将评估为
localhost:3000/login/login

路由器文件中的路径应与装载路径相关。所以对于
localhost:3000/login
您的
login
路由器应该是这样的

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

你能试着移动
app吗。听
block到
module.exports=app的正上方