从Angular's的HTTP服务传递到nodejs的正则表达式
regular expression for mongoose not passing not passing from Angular's HTTP service to nodejs
我试图在客户端创建一个猫鼬查询,我正在为以下不区分大小写的查询创建一个正则表达式
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, "''$&");
}
相关文章:
- java.net和javascript之间正则表达式的差异
- Grunt匹配正则表达式
- 不同浏览器中的空白字符正则表达式行为
- 正则表达式在字符串中找到base64
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 调用正则表达式匹配的函数
- 使用正则表达式评估电子邮件地址时出现性能问题
- Javascript 正则表达式 : ^[^/s/]+[a-z]{1,}[0-9]*[-_]*[^/][
- JavaScript正则表达式文本与RegExp对象
- 正则表达式只允许 x 个整数
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 改进用于验证付款金额的正则表达式
- 正则表达式与数字中的第二个点匹配
- Nodejs 可选正则表达式命名组的插件或代码片段
- Nodejs 正则表达式错误:“无效的正则表达式:没有什么可重复的”
- 无法获取有效的正则表达式以在nodejs中工作
- 从Angular's的HTTP服务传递到nodejs的正则表达式
- NodeJS中的URL正则表达式问题
- 我不明白为什么我的nodejs/javascript正则表达式不工作
- Javascript / NodeJS 正则表达式评估在第三次尝试时失败