У меня есть метод API, в котором пользователь может передать свой собственный запрос. Поле в коллекции просто ns, поэтому пользователь может передать что-то вроде:
v.search = function(query: Object){
// query => {ns:{$in:['foo','bar',baz]}} // valid!
// query => {ns:{$in:{}}} // invalid!
// query => {ns:/foo/} // valid!
});
есть ли способ сделать это, например, дымовой тест, который может не выполнять явно неправильные запросы?
Я надеюсь, что некоторые библиотеки MongoDB будут экспортировать эту функциональность ... но, по всей вероятности, они проверяют запрос только путем отправки его в базу данных, которая фактически является реальным арбитром того, какой запрос действителен / недействителен.
Но я хочу проверить запрос перед его отправкой в БД.
@TarunLalwani Да, это дорогой способ проверки запроса, занимает слишком много времени для высокопроизводительного сервера.





Я не думаю, что это возможно сделать иначе, чем путем отражения объекта query.ns и проверки каждого его свойства / связанного значения.
Некоторые модули, входящие в состав Компас MongoDB, были сделаны с открытым исходным кодом. В вашем случае могут быть полезны два модуля:
Хотя они могут не соответствовать вашему варианту использования на 100%, они должны дать вам очень тщательную проверку. Например npm install mongodb-language-model, тогда:
var accepts = require('mongodb-language-model').accepts;
console.info(accepts('{"ns":{"$in":["foo", "bar", "baz"]}}')); // true
console.info(accepts('{"ns":{"$in":{}}}')); // false
console.info(accepts('{"ns":{"$regex": "foo"}}')); // true
Также может быть интересен npm install mongodb-query-parser для синтаксического анализа строкового значения в запрос JSON. Например:
var parse = require('mongodb-query-parser');
var query = '{"ns":{"$in":["foo", "bar", "baz"]}}';
console.info(parse.parseFilter(query)); // {ns:{'$in':['foo','bar','baz']}}
хорошо, не могли бы вы показать пример использования mongodb-query-parser для нашей прекрасной публики?
Спасибо @Wan Bachtiar. Я пытался найти валидатор запросов для очистки для языка mongodb, когда наткнулся на это. Эта библиотека может помочь с базовыми проверками работоспособности путем проверки на соответствие MongoDB Injection с вводом из api в nodejs.
Почему бы не запустить его на пустой коллекции и посмотреть, нет ли ошибок синтаксического анализа?