ValidatorJS isNumeric функция не работает должным образом

Итак, я хочу проверить поле Mongoose, которое должно быть строкой, содержащей только цифры (потому что первая цифра может быть 0), и я настраиваю настраиваемый валидатор, например:

id: {
    type: String,
    required: [true, REQUIRED_VALIDATOR_ERROR_MESSAGE("ID")],
    validator: {
      validate: (value: string) => validator.isNumeric(value),
      message: (props) => `${props.value} is invalid.`,
    },
  }

но когда я передаю идентификатор, содержащий буквы, проверка проходит.

1 ответ

У тебя есть validate а также validatorперепутал. Должен быть:

id: {
    type: String,
    required: [true, REQUIRED_VALIDATOR_ERROR_MESSAGE("ID")],
    validate: {
      validator: (value: string) => validator.isNumeric(value),
      message: (props) => `${props.value} is invalid.`,
    },
  }

Вот минимальный рабочий пример:

const mongoose = require("mongoose");
const validator = require("validator");

mongoose.connect("mongodb://localhost/test", { useNewUrlParser: true });

const db = mongoose.connection;
db.on("error", console.error.bind(console, "connection error:"));
db.once("open", async function () {
  await mongoose.connection.db.dropDatabase();
  // we're connected!

  console.log("Connected");

  const userSchema = new mongoose.Schema({
    friends: [{ type: mongoose.Schema.Types.ObjectId, ref: "User" }],
    name: String,
    pid: {
      type: String,
      required: true,
      validate: {
        validator: function (value) {
          console.log("TEEEST", value);
          return validator.isNumeric(value);
        },
        message: (props) => "Prop is invalid",
      },
    },
  });

  const User = mongoose.model("User", userSchema);

  const bob = new User({ name: "Bob", friends: [], pid: "0123" });
  await bob.save();
  const natalie = new User({ name: "Natalie", friends: [bob], pid: "23" });
  await natalie.save();
  //const chris = new User({ name: "Chris", friends: [] });
  //await chris.save();
  const john = new User({ name: "John", friends: [natalie, bob], pid: "abc" });
  var valres = john.validateSync();
  console.log(valres);
  await john.save();
});

Ссылка: https://mongoosejs.com/docs/4.x/docs/validation.html, Пользовательские валидаторы

Другие вопросы по тегам