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