Mongoose игнорирует строковые атрибуты в почтовых запросах - PullRequest
0 голосов
/ 29 ноября 2018

В настоящее время я разрабатываю RESTful API с Express, используя TypeScript и MongoDB.Мой ORM по выбору - мангуст.При тестировании моего приложения со следующим запросом POST:

curl -i -X POST -H "Content-Type: application/json" -d '{ "first_name":"hansi"}' localhost:3000

я получаю следующее сообщение об ошибке, в котором говорится, что требуется атрибут "first_name":

{ ValidationError: Person validation failed: first_name: Enter a first name
    at ValidationError.inspect (/Users/schnabl/s6/node_modules/mongoose/lib/error/validation.js:59:24)
    at formatValue (internal/util/inspect.js:453:31)
    at inspect (internal/util/inspect.js:193:10)
    at Object.formatWithOptions (util.js:85:12)
    at Console.(anonymous function) (console.js:188:15)
    at Console.log (console.js:199:31)
    at /Users/schnabl/s6/src/routes/person.js:23:29
    at /Users/schnabl/s6/node_modules/mongoose/lib/model.js:4533:16
    at parallel (/Users/schnabl/s6/node_modules/mongoose/lib/model.js:2667:16)
    at /Users/schnabl/s6/node_modules/async/internal/parallel.js:39:9
    at /Users/schnabl/s6/node_modules/async/internal/once.js:12:16
    at iteratorCallback (/Users/schnabl/s6/node_modules/async/eachOf.js:60:13)
    at /Users/schnabl/s6/node_modules/async/internal/onlyOnce.js:12:16
    at /Users/schnabl/s6/node_modules/async/internal/parallel.js:36:13
    at callbackWrapper (/Users/schnabl/s6/node_modules/mongoose/lib/model.js:2640:20)
    at /Users/schnabl/s6/node_modules/mongoose/lib/model.js:4533:16
  errors:
   { first_name:
      { ValidatorError: Enter a first name
          at new ValidatorError (/Users/schnabl/s6/node_modules/mongoose/lib/error/validator.js:29:11)
          at validate (/Users/schnabl/s6/node_modules/mongoose/lib/schematype.js:871:13)
          at /Users/schnabl/s6/node_modules/mongoose/lib/schematype.js:924:11
          at Array.forEach (<anonymous>)
          at SchemaString.SchemaType.doValidate (/Users/schnabl/s6/node_modules/mongoose/lib/schematype.js:880:19)
          at /Users/schnabl/s6/node_modules/mongoose/lib/document.js:1913:9
          at process._tickCallback (internal/process/next_tick.js:61:11)
        message: 'Enter a first name',
        name: 'ValidatorError',
        properties: [Object],
        kind: 'required',
        path: 'first_name',
        value: undefined,
        reason: undefined,
        [Symbol(mongoose:validatorError)]: true } },
  _message: 'Person validation failed',
  name: 'ValidationError' }

Однако, когда я комментирую'' required: "введите строку" ", сервер не выдает ошибку. Но все же first_name и все другие строковые атрибуты, которые я использую в своей схеме, не добавляются в коллекцию. Есть только сгенерированные Mongo" идентификаторы ""и значения по умолчанию для даты рождения (current_timestamp) в коллекции.

Моя схема (personSchema.ts):

//imports

const Schema = mongoose.Schema;

export const PersonSchema = new Schema({
    first_name: {
        type: String
        //required: "Enter a first name"
    },
    ...
    birth_date: {
        type: Date,
        default: Date.now
    } 
}, { collection: 'person' });

Маршрутизатор (personRouter.ts):

//imports

export class PersonRoute {
    public personController: PersonController = new PersonController();

    public routes(app): void {
      ...
      //getrequests
      ...

      app.route("/").post((req: Request, res: Response) => {

        const PersonModel = mongoose.model('Person', PersonSchema);

        PersonModel.create(req.body, function (err, post) {
          if (err) console.log(err);
          res.json(post);
        });
      });
    }
}

Возможно ли, что с моим запросом на тестирование что-то не так?

РЕДАКТИРОВАТЬ: Я проверил запрос на публикацию в Postman и все еще получаю тот же результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...