Пн goose говорят, что проверка требовала ошибки, даже было предоставлено значение - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть JSON файл данных по этой ссылке https://github.com/vontend/upload/blob/master/countries.json

Моя модель с пн goosejs нравится

const { model, Schema } = require("mongoose");

const CountrySchema = new Schema({
    name: {
        type: String,
        required: [true, "Bạn phải nhập tên quốc gia"],
        unique: true,
    },
    code: {
        type: String,
        required: [true, "Bạn phải nhập code"],
        unique: true,
    },
    capital: {
        type: String,
        required: true,
    },
    region: {
        type: String,
        required: true,
        ref: "Region",
    },
    currency: new Schema({
        code: {
            type: String,
            required: true,
        },
        name: {
            type: String,
            required: true,
        },
        symbol: {
            type: String,
            required: true,
        },
    }),
    language: new Schema({
        code: {
            type: String,
            required: true,
        },
        name: {
            type: String,
            required: true,
        },
    }),
    flag: {
        type: String,
        required: true,
    },
});

const Country = model("Country", CountrySchema);

module.exports = Country;

И маршрут

const { Router } = require("express");
const fs = require("fs");
const Country = require("../models/Country");

const router = Router();


router.get("/country", async (req, res) => {
    try {
        let countries = await fs.readFileSync(
            __dirname + "/../install/countries.json",
            "utf-8"
        );
        countries = JSON.parse(countries);
        // countries = await Country.insertMany(countries);
        return res.json({
            success: true,
            message: "Init countries successful",
            data: {
                countries,
                length: countries.length,
            },
        });
    } catch (error) {
        res.json({
            success: false,
            message: "Init countries failed",
            error,
        });
    }
});

module.exports = router;

При запуске кода для вставки данных в базу данных я получил это сообщение

{
    "success": false,
    "message": "Init countries failed",
    "error": {
        "errors": {
            "capital": {
                "message": "Path `capital` is required.",
                "name": "ValidatorError",
                "properties": {
                    "message": "Path `capital` is required.",
                    "type": "required",
                    "path": "capital",
                    "value": ""
                },
                "kind": "required",
                "path": "capital",
                "value": ""
            }
        },
        "_message": "Country validation failed",
        "message": "Country validation failed: capital: Path `capital` is required.",
        "name": "ValidationError"
    }
}

Это так запутанно. Я не знаю, почему это так? Я дважды проверил, что путь capital существует для каждого элемента. Так что с ним не так? Может ли кто-нибудь объяснить мне это, большое спасибо

1 Ответ

1 голос
/ 29 апреля 2020

Пустые (неопределенные) значения нарушают требуемое правило.

В пн goose документы , это говорит:

Валидаторы не работают на неопределенные значения. Единственным исключением является обязательный валидатор.

Некоторые из данных капитала имеют пустые (неопределенные) значения, например:

  {
    "name": "Bouvet Island",
    "code": "BV",
    "capital": "",
    "region": "AN",
    "currency": {
      "code": "NOK",
      "name": "Norwegian krone",
      "symbol": "kr"
    },
    "language": {
      "code": "no",
      "name": "Norwegian"
    },
    "flag": "https://restcountries.eu/data/bvt.svg"
  },

Просто удалите обязательную опцию для поля капитала, чтобы это может работать.

Или как исправление: применить этот код перед определением схемы, чтобы пустое значение не нарушало требуемое правило.

mongoose.Schema.Types.String.checkRequired((v) => v != null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...