【问题标题】:Validation Error In Visual Studio Code with MongoDB使用 MongoDB 的 Visual Studio Code 中的验证错误
【发布时间】:2021-10-08 00:14:05
【问题描述】:

下面是我的 mongodb schema Product 有六个字段 - usernameemailbio图像哈希salt

var mongoose = require("mongoose");
var productSchema = new mongoose.Schema(
    {
        username: {
            type: String,
            lowercase: true,
            required: [true, "can't be blank"],
            index: true,
        },
        email: {
            type: String,
            lowercase: true,
            required: [true, "can't be blank"],
            index: true,
        },
        bio: String,
        image: String,
        hash: String,
        salt: String,
    },
    { timestamps: true }
);
module.exports = mongoose.model("Product", productSchema);

My Data/Product.js Info,数据库中存储的数据:

[
    {
        username: "USERNAME",
        email: "name.username@gmail.com",
        bio: "BIOSample",
        image: "Image",
        hash: "sample",
        salt: "sample",
    },
];

我的控制器代码:

const Product = require("../models/product");

//create new product => /api/v1/product/new
exports.newProduct = async (req, res, next) => {
    const product = await Product.create(req.body);
    res.status(201).json({
        success: true,
        product,
    });
};

在 npm run 时,我收到如下错误消息:

Product validation failed: email: can't be blank, username: can't be blank.

【问题讨论】:

  • 执行 console.log(req.body) 会发生什么?
  • 如果是这样,就不要写required: [true, "can't be blank"]。你只需要写required: true。如果你有进一步的验证,你可以在前端进行,否则,在 nodejs 中为 emailusername 编写一个验证函数

标签: javascript reactjs mongodb visual-studio-code


【解决方案1】:

如果你得到的错误是

产品验证失败:电子邮件:不能为空,用户名:不能为 空白。

那么可能,不要将 required 用作 required: [true, "can't be blank"] 。也许正因为如此,您可能会收到错误消息。

你只需要写 required: true 。您还需要为您的 emailusername 编写进一步的验证,如果您有代码,则可以在前端进行验证,否则,编写验证emailusername 在 nodejs 中的功能。它满足你的条件。

类似于下面这段代码,这是为了你理解:

const Joi = require("joi");
const mongoose = require("mongoose");
const { Genre, validateGenre, genreSchema } = require("./genre");
Joi.objectId = require("joi-objectid")(Joi);

const movieSchema = new mongoose.Schema({
    title: {
        type: String,
        required: true,
        minlength: 5,
        maxlength: 50,
    },
    numberInStock: {
        type: Number,
        required: true,
        min: 0,
        max: 255,
        default: 13,
    },
    dailyRentalRate: {
        type: Number,
        min: 0,
        max: 255,
        required: true,
    },
    liked: {
        type: Boolean,
        default: false,
    },
    genre: {
        type: genreSchema,
        required: true,
    },
});

const Movie = mongoose.model("Movie", movieSchema);

function validateMovie(movie) {
    const schema = {
        title: Joi.string().required().min(5).max(255),
        numberInStock: Joi.number().required().min(0).max(255),
        dailyRentalRate: Joi.number().required().min(0).max(255),
        liked: Joi.boolean(),
        // genreId: Joi.string().required()
        genreId: Joi.objectId().required(),
        _id: Joi.objectId(),
    };
    return Joi.validate(movie, schema);
}

module.exports.Movie = Movie;
module.exports.validateMovie = validateMovie;

上面我为movieSchema写了一个验证函数

同样你也可以编写验证函数:

const Joi = require("joi");
const mongoose = require("mongoose");
Joi.objectId = require("joi-objectid")(Joi);

var productSchema = new mongoose.Schema(
    {
        username: {
            type: String,
            lowercase: true,
            required: true,
            index: true,
        },
        email: {
            type: String,
            lowercase: true,
            required: true,
            index: true,
            unique: true,
        },
        bio: String,
        image: String,
        hash: String,
        salt: String,
    },
    { timestamps: true }
);
const Product = mongoose.model("Product", productSchema);


function validateProduct(product) {
    const schema = {
        username: Joi.string().required(),
        email: Joi.string().required().email(),
        bio: Joi.string().required(),
        image: Joi.string().required(),
        hash: Joi.string().required(),
        salt: Joi.string().required(),
        _id: Joi.objectId(),
    };
    return Joi.validate(product, schema);
}

module.exports.Product = Product;
module.exports.validateProduct = validateProduct;

您需要 npm install joi 才能使 Joi 工作。 https://www.npmjs.com/package/joi

【讨论】:

  • 输入后:required: true,现在的错误是:Product validation failed: email: Email required, username: Username Required。
  • 您需要输入正确格式的电子邮件,例如:abcd@gmail.com。
猜你喜欢
  • 2020-01-16
  • 2017-10-23
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 2021-07-02
  • 1970-01-01
  • 2020-02-01
相关资源
最近更新 更多