javascript - req.body.email 未定义
问题描述
我正在按照教程实施密码重置,但遇到了问题。我的 req.body.email 回来未定义。我安装了 body-parser 并且我的其他路线运行良好。
这是我的代码摘要:
var express = require('express');
var router = express.Router({ mergeParams: true });
var Kids = require('../models/kid');
var User = require('../models/user');
var async = require('async');
var nodemailer = require('nodemailer');
var crypto = require('crypto');
var middleware = require('../middleware');
router.post('/password_reset', function(req, res, next) {
function(token, done) {
User.findOne({ email: req.body.email }, function(err, user) {
console.log(req.body.email); <====== Returning and undefined
console.log(user); <====== Returning as null
if (!user) {
req.flash('error', 'No account with that email address exists.');
return res.redirect('/password_reset');
}
user.resetPasswordToken = token;
user.resetPasswordExpires = Date.now() + 3600000; // 1 hour
user.save(function(err) {
done(err, token, user);
});
});
}
});
和我的表格
<form action="/password_reset" method="POST" >
<div class="form-group">
<label for="exampleInputEmail1">Enter your email address</label>
<input type="email" class="form-control" id="email" aria-describedby="emailHelp" placeholder="Enter email" required>
</div>
<button type="submit" class="btn btn-warning">Submit</button>
</form>
解决方案
你有两个问题:
您没有提交任何数据
你<input>
没有name
属性,所以不能成功控制。
如果您想req.body.email
在其中包含数据,那么您需要说name="email"
.
与此相关,您说<label for="exampleInputEmail1">
但是id="email"
。该for
属性需要与id
它所标记的元素相匹配。然后aria-describedby="emailHelp"
需要匹配标记当前元素的元素的 ID……当你有一个真正的<label>
.
您没有解析提交的数据
请参阅文档req.body
:
包含在请求正文中提交的数据键值对。默认情况下,它是 undefined,并且在您使用诸如 express.json() 或 express.urlencoded() 之类的正文解析中间件时填充。
您还没有使用任何正文解析中间件。
您的表单正在提交 urlencoded 数据(默认),因此请使用express.urlencoded()
:
router.use(express.urlencoded())
推荐阅读
- python - setContextProperty() 不会在 qml 文件中创建类实例
- python - 如何创建混淆矩阵来评估模型?
- javascript - 我怎样才能开始 NodeJS 帖子?
- reactjs - Json-server 使用 React js 和 Redux 响应错误 404 not found Post Method
- codeigniter - Codeigniter 完整日历集成
- python - 如何使用 pandas 进行条件选择
- yii2 - Yii2 - 将控制器扩展为现有模块
- javascript - 在 Nuxt.js 中导入单个 Vuetify 组件?
- python - 分块处理字节字符串
- javascript - 反应我想覆盖一个对象的值