当用户注册时,我将用户模型字段允许 null 设置为 true,然后再次登录用户可以上传他们的个人资料图片,但是当我测试此代码时,我面临错误 {"message": "notNull Violation: users.firstName不能为空, notNull 违规:users.lastName 不能为 null} ???
我现在该怎么办
const Storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, './public/images')
},
filename: (req, file, callBack) => {
callback(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname))
},
});
const multerFilter = (req, file, cb) => {
var ext = path.extname(file.originalname);
if(ext !== '.png' && ext !== '.jpg' && ext !== '.gif' && ext !== '.jpeg') {
cb(new Error('Only images are allowed'))
}
cb(null, true)
};
const updateFile = multer({
storage: Storage,
limits: 3 * 1024 * 1024, //max 3MB file upload
fileFilter: multerFilter,
});
router.post("/profile" , updateFile.single("upload"), async(req, res)=>{
console.log('hello')
console.log(req.file)
if (req.file == undefined) {
return res.status(400).json({ message:'please select the file' });
}
console.log('inside the db')
try {
await users.create({
image: req.file.filename
})
.then(msg=>{
res.status(200).json({ message: "profile is uploaded successfully!" });
});
console.log('outside the db')
} catch (error) {
res.status(500).json({ message: error.message });
}
});
this is my user model and I am using sequelize
```
import { Sequelize } from "sequelize";
import db from "../config/Database.js";
const Datatypes = Sequelize;
const users = db.define('users', {
uuid:{
type: DataTypes.STRING,
defaultValue: DataTypes.UUIDV4,
allowNull: false,
validate: {
notEmpty: true
}
},
firstName: {
type: DataTypes.STRING,
allowNull: false,
},
lastName:{
type: DataTypes.STRING,
allowNull: false,
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
validate: {
notEmpty: true,
isEmail: true,
},
},
password: {
type: DataTypes.STRING,
allowNull: false,
validate: {
notEmpty: true
}
},
image: {
type: DataTypes.STRING,
allowNull: true
},
role:{
type: DataTypes.STRING,
allowNull: false,
validate:{
notEmpty: true
}
}
}, {
freezeTableName: true
})
export default users;
```
在
users.create
上,您应该传递所有必填字段,或者在您只想更新图像时使用更新(这看起来就像您在上面的代码中想要做的那样)。
此外,如果您想要第二种情况,则此操作应定义为 PUT/PATCH 而不是 POST。
数据库模式中的名字、姓氏、电子邮件、密码字段不允许为空。因此,在创建用户时,您必须在正文中传递名字、姓氏、电子邮件和密码。
const {image, firstName, lastName, email, password} = req.body;
await users.create({
image: "you image",
firstName: "your name",
lastName: "your name",
email: "your email",
password: "your password"
})
如果您不想传递名字、姓氏、电子邮件和密码,则必须将sequelize字段中的allowNull属性设置为true。
firstName: {
type: DataTypes.STRING,
allowNull: true,
},
lastName:{
type: DataTypes.STRING,
allowNull: true,
},