不能 POST / 使用 express 和 body-parser

Cannot POST / using express and body-parser

这个问题已经有人问过了,但其他答案对我没有帮助。我有一个登录表单解析用户名和密码并从数据库对其进行身份验证,但我不断收到 Cannot POST / 错误。

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

app.get('/', sessionChecker, (req, res) => {
    res.redirect('/login');
});
// route for user Login
app.route('/login')
    .get(sessionChecker, (req, res) => {
        res.render('login.pug');
    })
    .post((req, res) => {
    var username = req.body.username;
    var password = req.body.password;

    User.findOne({ where: { username: username } }).then(function (user) {
        if (!user) {
            res.redirect('/login');
        } else if (!user.validPassword(password)) {
            res.redirect('/login');
        } else {
            req.session.user = user.dataValues;
            res.redirect('/dashboard');
        }
    });
});

app.listen(3000, function () {
    console.log('express is running on port 3000');
});

用于登录的 pug 文件:

form(action='/', method='POST')        
     input(type='text',name='username',placeholder= 'Username', required='')
     input(type='password', name='password', placeholder='Password', required='')
     input(type='submit', value='Login')

我哪里做错了?

我看不到 Express 应用程序在哪里处理 post

这样做:

app.post('/', function (req, res) {
  res.send('hello world')
})

我建议您使用 JWT 令牌身份验证,这样您就不必担心先在 /login 上调用“./get”,然后再调用“./post”来检查会话。

使用 JWT 可以令牌,您可以简单地提供令牌验证,如果令牌过期或重定向到新页面时进行验证,它将自动重定向到登录页面。

此外,如果您进一步了解 JWT,您会发现,您也可以在令牌中传递数据,它可以是根据用户登录的权限。

您尝试在 /login 路由上登录,但将 post 发送到 /。把你的哈巴狗改成

form(action='/login', method='POST')  

顺便说一句:如果您使用 Passport,您可以轻松添加其他登录方法:Google、FB、twitter、...