javascript - 类型错误 : Cannot read properties of undefined when sending an EJS form to Express

标签 javascript node.js express

<分区>

我是 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;

用户模型.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;

服务器.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 中。

这是我根据用户建议尝试的一件事。就是把email: req.body.email, signupRoutes.js 改成email: res.json({requestBody: req.body.email}) 以及在“server.js”中的路由上方添加 app.use(express.json());

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

最佳答案

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

没有 req.bodyundefined,这就是您收到该错误的原因。此外,app.use(express.json()) 不会解析来自 from 的数据。

express.urlencoded({extended: false})

关于javascript - 类型错误 : Cannot read properties of undefined when sending an EJS form to Express,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73693944/

相关文章:

javascript - 带有 html5 和 JS 的子窗口?

node.js - Next.js - 错误构建目录在 EC2 上不可写

node.js - 找不到模块 socket.io

node.js - EJS 在 gruntfile 中转义

node.js - 为什么 Express 不是中间件?

javascript - 将 JavaScript 字符串传递给编译为 WebAssembly 的 Rust 函数

javascript - 如何使SVG图像图案填充随对象移动?

javascript - 主干模型服务器端和内存处理

javascript - Node.js 登录后无法让浏览器重定向

javascript - reverse() 不是一个函数