javascript - Mongoose Schema 的属性未定义
问题描述
当我尝试使用我的应用创建新用户帐户时出现此错误。
TypeError: Cannot read property 'firstName' of undefined
这是我的 models.js 文件
mongoose.model('User', new mongoose.Schema({
firstName: String,
lastName: String,
email: String,
passwordHash: String,
subscriptionActive: {type: Boolean, default: false},
customerId: String,
subscriptionId: String,
}));
这是我的前端代码。
<form class="user" action="/signup" method="post">
<div class="form-group row">
<div class="col-sm-6 mb-3 mb-sm-0">
<input type="text" class="form-control form-control-user" required name="firstName" placeholder="First Name">
</div>
<div class="col-sm-6">
<input type="text" class="form-control form-control-user" required name="lastName" placeholder="Last Name">
</div>
</div>
<div class="form-group">
<input class="form-control form-control-user" required type="email" name="email" placeholder="Email"/>
</div>
<div class="form-group row">
<div class="col-sm-6 mb-3 mb-sm-0">
<input class="form-control form-control-user" required type="Password" name="password" placeholder="password"/>
</div>
这些是我的应用程序代码中的相关部分:
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var mongoose = require('mongoose');
require('./models.js');
var bcrypt = require('bcryptjs');
var expressSession = require('express-session');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var dotenv = require('dotenv');
dotenv.config();
const bodyParser = require('body-parser');
var User = mongoose.model('User');
mongoose.connect('{confidential}', { useNewUrlParser: true, useUnifiedTopology: true });
// Middleware
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(expressSession({
secret: process.env.EXPRESS_SESSION_SECRET,
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
passport.use("signup-local", new LocalStrategy({
usernameField: "email",
passwordField: "password"
}, function(req, email, password, next) {
console.log('req :',req, 'req.body :', req.body);
User.findOne({
email: email
}, function(err, user) {
if (err) return next(err);
if (user) return next({message: "User already exists"});
let newUser = new User({
firstName: req.body.firstName,
lastName: req.body.lastName,
email: email,
passwordHash: bcrypt.hashSync(password, 10), // Could potentially be hashed asynchronously
});
// If newUser is passed successfully redirect to the main page
newUser.save(function(err) {
next(err, newUser);
});
});
}));
app.post('/signup', passport.authenticate('signup-local', { failureRedirect: '/' }),
function(req, res) {
res.redirect('/main');
});
我正在尝试创建一个新用户,同时还使用 Passport.js 进行身份验证。日志显示req.body
未定义。我不明白为什么会这样。有人可以解释一下吗?
解决方案
推荐阅读
- javascript - JS获取数组子节点数据
- jupyter-notebook - 启动 jupyter-lab 并从命令行打开一个特定的笔记本?
- sql - 报表生成器中的 URL 连接
- typescript - 不和谐嵌入加入消息
- php - 如何在php的同一张表中插入同名数据?
- swift - 如何使用 if 语句更改 UIButton 图像
- javascript - 将所有innerText从页面拉到json的最佳方法?
- matlab - 评估样条的基函数是什么意思?
- swift - GeoFirestore GeoFire 依赖项不允许我更新 Firebase
- terminal - 我需要重置终端写入头,不清除字符