регулярное выражение для mongoose, не передаваемое и не передающееся от HTTP-сервиса Angular к nodejs

0

Я пытаюсь создать запрос mongoose на стороне клиента, я создаю регулярное выражение для запросов без учета регистра, как показано ниже

query = {city: {'$regex': /NY/i}}

Однако, когда я получаю данные на сервере, я получаю пустой объект, как показано ниже.

query = {city: {'$regex': {}}}

Я не уверен, что я делаю неправильно.

Моя функция углового обслуживания для передачи данных выглядит следующим образом.

queryDB: function(query) {
                    var deferred = $q.defer();
                    $http.post("/path", {data: query})
                            .success(function(response) {
                                deferred.resolve(response);
                            })
                            .error(function(error) {
                                deferred.reject(error);
                            })

                    return deferred.promise;
                },

1 ответ

1

Вы пытаетесь передать объект javascript, сгенерированный на стороне браузера, на экспресс-сервер. Данные, указанные в вызовах службы $ http, преобразуют данные из объектов javascript в JSON. JSON - это способ представления данных в текстовой форме, поэтому, когда ваше регулярное выражение преобразуется в объект emptry. Чтобы убедиться в этом, просто выполните инструкции в оболочке node.js.

> query = {city: {'$regex': /NY/i}}
{ city: { '$regex': /NY/i } }
> console.log(JSON.stringify(query))
{"city":{"$regex":{}}}

Чтобы получить требуемый результат, вы должны отправить свои данные в текстовой форме, а затем сгенерировать регулярное выражение на стороне сервера, а затем выполнить запрос регулярных выражений с помощью mongoose. Вы можете использовать флаг, чтобы проверить, должен ли запрос быть регулярное выражение или поиск в обычном тексте.

var query = {city: {data: "NY", isRegex: true}}

И затем на стороне сервера вы создаете объект regexp на основе флага

var regex = new regExp(city.data, 'i')

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

function escapeRegExp(str) {
  return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню