Ошибка проверки: путь обязателен, но переменная не является ни нулевой, ни пустой - PullRequest
0 голосов
/ 14 октября 2019

Я проверил, что мой метод создания сработал, но когда я это сделал, он вернул мне эту ошибку:

makeChallenge challengeService {ValidationError: сбой проверки заданий :imumLevel: Path minimumLevel требуется. , endDate: Требуется путь endDate., startDate: Требуется путь startDate., цель: Требуется путь objective., описание: Требуется путь description., имя: Требуется путь name.

Но когда я зарегистрировал тело запроса, все эти параметры были заполнены. Когда я пропустил один параметр, ошибка изменилась только на тот параметр, который требуется.

Модель

import mongoose, { Document, Schema, Model } from 'mongoose';

export interface Challenge {
  _id: any;
  name: string;
  description: string;
  objective: string;
  startDate: Date;
  endDate: Date;
  minimumLevel: number;
}

export interface ChallengeDocument extends Challenge, Document {}

const schema = new Schema(
  {
    name: { type: String, required: true },
    description: { type: String, required: true },
    objective: { type: String, required: true },
    startDate: { type: Date, required: true },
    endDate: { type: Date, required: true },
    minimumLevel: { type: Number, required: true }
  },
  { _id: true, timestamps: true }
);

export const model = mongoose.model<ChallengeDocument>('challenges', schema);

Модели

import * as user from './modules/user/model';
import * as challenge from './modules/challenge/model';
import * as contract from './modules/contract/model';

export type Models = typeof models;

const models = {
  user,
  challenge,
  contract
};

export default models;

Сервис

import { Router } from 'express';
import models from '../models';

const routes = Router();

const stringToDate = (string: string): Date => {
  let subStringArray = string.split('-');
  let intList: number[] = [];
  subStringArray.forEach(str => {
    intList.push(Number.parseInt(str));
  });
  console.log(intList);
  let date: Date = new Date(intList[0], intList[1], intList[2]);
  return date;
};

routes.post('/makeChallenge', async (req, res) => {
  console.log(req.body);
  const challenge = await models.challenge.model
    .create(
      {
        name: req.body.name,
        description: req.body.description,
        objective: req.body.objective,
        startDate: stringToDate(req.body.startDate),
        endDate: stringToDate(req.body.endDate),
        minimumLevel: Number.parseInt(req.body.minimumLevel)
      },
      { new: true }
    )
    .catch(e => console.log('makeChallenge of challengeService', e));
  res.send(challenge);
});

export default routes;

Запрос почтальона:

сообщение на http://localhost:xxxx/makeChallenge

{
    "name" : "TestChallenge",
    "description" : "This is to test the api",
    "objective" : "Make the api work",
    "startDate" : "2019-9-23",
    "endDate" : "2019-12-20",
    "minimumLevel" : 1
}

1 Ответ

1 голос
/ 14 октября 2019

В документации mongoose я не нашел такой опции для model.create, вы можете удалить {new: true} и попробовать?

...