TypeError:向Express发送EJS表单时,无法读取未定义的属性



我是nodeJS的新手,文件signupRoutes.js中的req.body.emailreq.body.password似乎没有在我的项目前端获取表单数据。

知道为什么吗?具体错误为"TypeError: Cannot read properties of undefined (reading 'email')"

signup.ejs:

<form action='/signup' method="post">
<label for="email">Email:</label>
<input type="text" id="email" name="email"><br><br>
<label for="password">Password:</label>
<input type="password" id="password" name="password"><br><br>
<input type="submit" value="Submit">
</form>

signupRoutes.js:

const express = require('express');
const router = express.Router();
const User = require('../models/userModel');
router.get('/', (req, res) => {
res.render('./signup');
res.end();
});
router.post('/', (req, res) => {
const user = new User({
email: req.body.email,
password: req.body.password
}); 
user.save();
res.redirect('/index');
});
module.exports = router;

userModel.js:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const userSchema = new Schema({
email: {
type: String,
required: true
},
password: {
type: String,
required: true
}
}, {timestamps: true})
const User = mongoose.model('User', userSchema);
module.exports = User;

server.js:

const express = require('express');
const app = express();
const mongoose = require('mongoose');
const ejs = require('ejs');
const homepageRoutes = require('./routes/homepageRoutes');
const signupRoutes = require('./routes/signupRoutes');
const loginRoutes = require('./routes/loginRoutes');
const dotenv = require('dotenv');
dotenv.config();
const dbusername= process.env.DB_USERNAME;
const dbpassword= process.env.DB_PASSWORD;
dbURI = `mongodb+srv://${dbusername}:${dbpassword}@testingcluster.ix9mpsg.mongodb.net/?retryWrites=true&w=majority`;
mongoose.connect(dbURI).then((result) => app.listen(4000)).catch((err) => 
console.log(err));
app.set('view engine', 'ejs');
app.use(express.static('assets'));
app.use("/index", homepageRoutes);
app.use("/signup", signupRoutes);
app.use("/login", loginRoutes);

谢谢你抽出时间。附带说明:我知道你需要为密码添加更多的安全性,我现在只是在测试将数据发布到mongoDB中。

由于用户的建议,我尝试了一件事。它是将signupRoutes.js上的email: req.body.email改变为email: res.json({requestBody: req.body.email})以及将app.use(express.json());添加到"0"中的路由之上;js";。

它只是返回了一个带有空对象的空白页面,也没有将数据发布到MongoDB中。

server.js中,在行app.use(express.static('assets'))之后或在路由处理程序之前,添加以下行以解析即将到来的请求,并将其附加到req.body

没有req.body就是undefined,这就是您出现该错误的原因。此外,CCD_ 14不解析来自CCD_ 15的数据。

express.urlencoded({extended: false})

最新更新