{"message": "notNull 违规:users.firstName 不能为空, notNull 违规:users.lastName 不能为 null} 我面临的错误

问题描述 投票:0回答:2

当用户注册时,我将用户模型字段允许 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;
```

javascript node.js reactjs user-profile
2个回答
0
投票

users.create
上,您应该传递所有必填字段,或者在您只想更新图像时使用更新(这看起来就像您在上面的代码中想要做的那样)。

此外,如果您想要第二种情况,则此操作应定义为 PUT/PATCH 而不是 POST。


0
投票

数据库模式中的名字、姓氏、电子邮件、密码字段不允许为空。因此,在创建用户时,您必须在正文中传递名字、姓氏、电子邮件和密码。

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,
        
    },
© www.soinside.com 2019 - 2024. All rights reserved.