【问题标题】:Cannot POST / using express and body-parser无法 POST / 使用 express 和 body-parser
【发布时间】:2019-02-28 18:04:08
【问题描述】:

这个问题已经被问过了,但其他答案对我没有帮助。我有一个解析用户名和密码的登录表单,并从数据库对其进行身份验证,但我不断收到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')

我哪里做错了?

【问题讨论】:

    标签: node.js express body-parser


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      我看不到快递应用在哪里处理帖子

      这样做:

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

      【讨论】:

      • 这不是解决方案,但您的回答使我解决了问题。 :)
      【解决方案3】:

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

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

      另外,如果您探索更多有关 JWT 的信息,您会发现,您也可以在令牌中传递数据,它可以是根据用户登录的权限。

      【讨论】:

      • JWT 用于登录网站?这是一个很大的夸张。 JWT 在与 API 通信时非常棒。护照和本地策略更好。
      • @bato3 我在 API 方面回答得更多,我意识到 Hossein 在身份验证方面需要更多帮助,因此 Passport 和 Local 策略更好。对于未来的智威汤逊来说,护照是很好的。
      • 我不认为 JWT 不好,只是它并不适合任何地方。此外,您需要.post / .get 来生成令牌,这就是现在的问题。
      猜你喜欢
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2016-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多