从Angular's的HTTP服务传递到nodejs的正则表达式

regular expression for mongoose not passing not passing from Angular's HTTP service to nodejs

本文关键字:nodejs 正则表达式 服务 HTTP Angular      更新时间:2023-09-26

我试图在客户端创建一个猫鼬查询,我正在为以下不区分大小写的查询创建一个正则表达式

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

然而,当我在服务器上获得数据时,我得到一个空对象,如下

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

我不知道我做错了什么。

用于传递数据的angular服务函数如下所示:

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;
                },

您正在尝试将浏览器端生成的javascript对象传递给express服务器。$http服务调用中指定的数据将数据从javascript对象转换为JSON。JSON是一种以文本形式表示数据的方法,因此当您的regexp转换为空对象时。要验证这一点,只需执行node.js shell中的语句。

> 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')

在从用户输入生成正则表达式时,还应该转义正则表达式。使用正则表达式转义函数,转义regexp中的所有特殊字符。

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