В настоящее время я разрабатываю 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 и все еще получаю тот же результат: