我正在尝试编写一个登录页面。我得到了带有登录框的html页面 我输入电子邮件和密码,然后提交给服务器,在服务器上,我得到了路由,如果doc存在,则对db进行数据检查,如果存在,则应重定向到主页 问题是我从表单发送到服务器的数据始终未定义,我在此处检查其他ppl问题,但没有找到任何好的结果
html登录页面:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="/css/style.css" />
<title>{{PageTitle}}</title>
</head>
<body>
{{> header}}
<div class="login-box">
<div class="form">
<form action="/get_user" method="post" class="login-form">
<input type="email" name="Email" placeholder="Email"/>
<input type="password" name="Password" placeholder="Password"/>
<button type="submit">login</button>
</form>
</div>
</div>
{{> footer}}
</body>
服务器代码:
const _ = require('lodash');
const express = require('express');
const bodyParser = require('body-parser');
const {mongoose} = require('./db/mongoose');
const hbs = require('hbs');
var {User} = require('./models/user');
var app = express();
app.set('view engine', 'hbs');
const port = process.env.PORT;
hbs.registerPartials(__dirname + '/../views/partials');
app.user(bodyParser.json());
app.use(express.static(__dirname + '/../public'));
app.use(express.static(__dirname + '/../public/images'));
app.use(express.static(__dirname + '/../public/fonts'));
app.listen(port, () => {
console.log(`Started on port ${port}`);
});
app.get('/', (req, res) => {
res.render('login.hbs', {
PageTitle: 'Log In',
ConnectUser: 'Guest'
});
});
app.post('/get_user', (req, res) => {
var body = _.pick(req.body, ['Email , 'Password']);
User.findOne({
Email: body.Email,
Password: body.Password
}).then((user) => {
console.log(body.Email + ' ' + body.Password);
if(!user) {
return res.status(404).send();
}
var fullName = user.First_Name + ' ' + user.Last_Name;
res.redirect('/mainPage', {ConnectUser: fullName});
}).catch((e) => {
res.status(400).send();
});
});
我很少检查,当我调用/ get_user req.body-> var body-> user r空时 数据从表单传递到服务器的即时消息还检查邮递员的这条路线,并在我自己编写正文时检查它的工作,我唯一想到的问题是我从表单arnt发送为json的数据和正文解析器仅在json格式,所以我可能需要更改行
app.use(bodyParser.json());
如果有任何一个人可以朝正确的方向进行评估,那该不正确。
答案 0 :(得分:0)
尝试使用表单enc-type属性,并了解如何配置bodyparser以基于enc-type获取所需的值。
https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement/enctype
答案 1 :(得分:0)
Content-Type: application/x-www-form-urlencoded
而不是JSON的形式发布到服务器。Json bodyparser将不执行任何操作,因为它不使用JSON格式发送数据。请参见发布方法下的 MDN guide。
在服务器代码的app.use(bodyParser.json())
下,添加以下内容:
app.use(bodyParser.urlencoded({extended: true}));
这将以您期望的方式将数据添加到请求正文中。