Я новичок с использованием Vertx, я создаю базовый Api Rest с Vertx + Mongo, используя Javascript.
Я ищу какой-то способ автоматической проверки входящих документов перед вставкой или обновлением (например, что-то вроде схемы в Mongoose).
Я получил следующее:
POST точка входа Вставка нового кота
var BodyHandler = require("vertx-web-js/body_handler");
var Router = require("vertx-web-js/router");
var router = Router.router(vertx);
router.post("/cat")
.produces("application/json")
.handler(BodyHandler.create().handle)
.handler(controller.createCat);
Функция контроллера Вставка нового кота
createCat: function (ctx) {
var response = ctx.response();
var body = ctx.getBodyAsJson() || {};
console.log('inserting cat')
connection.mongoClient.insert("cats", { name: body.name }, function (res, res_err) {
if (res_err == null) {
var id = res;
console.log("Inserted cat with id " + id);
response.putHeader("content-type", "application/json");
response.end(JSON.stringify(id));
} else {
console.log('err')
res_err.printStackTrace();
}
});
}
Проблема в том, что я могу вставить пустые документы, получив документы только с одним полем: ID Монго.
TL; DR - я хочу знать, есть ли какой-нибудь способ сообщить Монго, что поле имени ВСЕГДА обязательно.
Вы можете создать свою собственную схему в отдельном файле json, а затем создать свой собственный метод проверки, когда контекст предоставляется вашим маршрутизатором.
Я предполагаю, что разные конечные точки имеют разные проверки.
Вы также можете создать промежуточное программное обеспечение, используя gateleen
у вас есть много вариантов, у mongoose есть свои преимущества, но весь смысл использования mongodb заключается не в создании схемы. Поэтому вы можете предположить, что запрос должен иметь определенные обязательные поля для проверки.
В mongodb есть концепция проверки с фильтрами запросов для сбора: https://docs.mongodb.com/manual/core/schema-validation/#query-expressions
Если поле "имя" всегда является обязательным, вы можете создать свою коллекцию следующим образом:
db.createCollection("cats", {
validator: {
$and: [ {"name": {$type: "string", $exists: true}} ]
})