使用 ExpressJS 和 MySql 的 CRUD 实现 错误:无法读取未定义的属性(读取"名称")



我试图为我的用户创建一个CRUD,但在发布请求时遇到了麻烦,我看到了一些类似的问题,但没有一个对我有效

这是我的用户控制器

const { user } = require("../models");
exports.all = (req, res) => {
user.findAll().then((data) => {
res.send(data);
});
};
exports.findById = (req, res) => {
user.findByPk(req.params.id).then((data) => {
res.send(data);
});
};
exports.create = (req, res) => {
const newUser = {
id: user.length,
name: req.body.name,
email: req.body.email,
password: req.body.password,
username: req.body.username,
birth_date: req.body.birth_date,
phone_number: req.body.phone_number,
createdAt: new Date(),
updatedAt: new Date(),
};
if (!newUser.name ||
!newUser.email ||
!newUser.password ||
!newUser.username ||
!newUser.birth_date ||
!newUser.phone_number
) {
return res.status(400).json({ msg: "Please fill all the requirements" });
}
user.create(newUser).then((data) => {
res.send(data);
});
};
exports.update = (req, res) => {
const found = user.some((users) => users.id === parseInt(req.params.id));
if (!found) {
const updMmber = req.body;
user.forEach((users) => {
if (users.id === parseInt(req.params.id)) {
users.name = updMmber.name ? updMmber.name : users.name;
users.email = updMmber.email ? updMmber.email : users.email;
users.password = updMmber.password ? updMmber.password : users.password;
users.usersname = updMmber.usersname ?
updMmber.usersname :
users.usersname;
users.birth_date = updMmber.birth_date ?
updMmber.birth_date :
users.birth_date;
users.phone_number = updMmber.phone_number ?
updMmber.phone_number :
users.phone_number;
res.send("Users Updated", user);
}
});
} else {
res
.status(404)
.json({ msg: `No user found with the id of  ${req.params.id}` });
}
};
exports.delete = (req, res) => {
const found = user.some((users) => id === parseInt(req.params.id));
if (!found) {
res
.status(404)
.json({ msg: `No user found with the id of  ${req.params.id}` });
} else {
res.json({
msg: `User with id of ${req.params.id} has been deleted`,
user: user.filter((users) => user.id !== parseInt(req.params.id)),
});
}
};
exports.update = (req, res) => {
const found = user.some((users) => users.id === parseInt(req.params.id));
if (!found) {
const updMmber = req.body;
user.forEach((users) => {
if (users.id === parseInt(req.params.id)) {
users.name = updMmber.name ? updMmber.name : users.name;
users.email = updMmber.email ? updMmber.email : users.email;
users.password = updMmber.password ? updMmber.password : users.password;
users.usersname = updMmber.usersname ?
updMmber.usersname :
users.usersname;
users.birth_date = updMmber.birth_date ?
updMmber.birth_date :
users.birth_date;
users.phone_number = updMmber.phone_number ?
updMmber.phone_number :
users.phone_number;
res.send("Users Updated", user);
}
});
} else {
res
.status(404)
.json({ msg: `No user found with the id of  ${req.params.id}` });
}
};
exports.delete = (req, res) => {
const found = user.some((users) => id === parseInt(req.params.id));
if (!found) {
res
.status(404)
.json({ msg: `No user found with the id of  ${req.params.id}` });
} else {
res.json({
msg: `User with id of ${req.params.id} has been deleted`,
user: user.filter((users) => user.id !== parseInt(req.params.id)),
});
}
};

这是我的用户模型

"use strict";
const { Model } = require("sequelize");
module.exports = (sequelize, DataTypes) => {
class user extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
// define association here
}
}
user.init({
name: DataTypes.STRING,
email: DataTypes.STRING,
password: DataTypes.STRING,
username: DataTypes.STRING,
birth_date: DataTypes.INTEGER,
phone_number: DataTypes.STRING,
}, {
sequelize,
modelName: "user",
});
return user;
};

这是我的服务器.js

const express = require("express");
const app = express();
const PORT = 3000;
const userController = require("./controller/userController");
const addressesController = require("./controller/addressesController");
app.listen(PORT);
app.get("/", (req, res) => {
res.send("Hello World");
});
//user routes
app.get("/user", userController.all); // show Alldata user
app.get("/user/:id", userController.findById); // show data user :id
app.post("/user", userController.create); // create data user
app.post("/user/:id"); //update data user :id
app.delete("/user/:id"); //delete data user :id

这是当我试图在poster中执行邮件请求时的响应https://i.stack.imgur.com/vWnK5.png

非常感谢你的帮助,我真的很感激!

您需要传入一个中间件来解析Express中的JSON请求。

在Express4.16+中,express.json()中间件可用:

const app = express();
app.use(express.json()); // add this
// routes, etc...

在Express 4.0-4.15中,使用body-parser软件包:

const app = express();
const bodyParser = require('body-parser');
app.use(bodyParser.json()); // add this
// routes, etc...

在Express<4:

const app = express();
app.use(express.bodyParser()); // add this
// routes, etc...

最新更新