2015-06-06 5 views
1

Я создал интерфейс mongodb на стороне клиента, чтобы поговорить с серверной стороной mongodb.
Он очень похож на мини-монго, выполненный в метеор. вот пример:node.js - отправка регулярного выражения на сервер

model.find({"field": /search/}).exec(function(err, model){ 
    construct(model); 
}); 

Теперь обычно все хорошо, за исключением, когда я использую регулярное выражение работает. , и я знаю, в чем проблема, но я не могу это исправить.
проблема, как вы уже догадались, заключается в том, когда regex/regexParameter/при отправке ajax на сервер преобразуется в «/ regexParameter /», а одинарные кавычки (или double) делают регулярное выражение регулярной строкой.
на сервере у меня есть что-то вроде этого:

var findObject = req.query.findObject // {"field": "/search/"} :(
req.models[config.table] 
    .find(findObject) 
    .exec(function(err, model){ 
     return res.json({ 
      error: err, 
      result: model, 
     }); 
    }); 

есть все, что я могу сделать, чтобы сделать эту работу без написания как 100 строк кода, который перебирает через каждый из FindObject и соответствует каждой строке по регулярному выражению ...?
Спасибо всем

ответ

2

Вы правы - вы не можете пройти RegExp объектов между клиентом и сервером, поскольку во время сериализации они преобразуются в строки.

Решение? (или, возможно, - обходной путь)

$regex Использование оператора в запросах, так что вам не нужно использовать РегВыр объектов.

Так что:

{ 
    field: /search/ 
} 

Становится это:

{ 
    field: { 
    $regex: 'search' 
    } 
} 

Или, давая регистронезависимое Пример поиска:

{ 
    field: { 
    $regex: 'search', 
    $options: 'i' 
    } 
} 

(вместо field: /search/i)

Подробнее о $regex синтаксисе here (включая некоторые из его restrictions).

Смежные вопросы