Javascript Meteor:将RegExp对象保存到会话
我试图在MongoDB查询的Meteor会话中将正则表达式保存为RegExp对象,但在Session.get()之后,RegExp对象只是一个空对象 js htmlJavascript Meteor:将RegExp对象保存到会话,javascript,regex,mongodb,session,meteor,Javascript,Regex,Mongodb,Session,Meteor,我试图在MongoDB查询的Meteor会话中将正则表达式保存为RegExp对象,但在Session.get()之后,RegExp对象只是一个空对象 js html meteor regexp会话测试 {{>测试} 点击按钮并查看控制台 你知道为什么这不起作用吗 提前感谢 Session软件包在引擎盖下使用ReactiveDict ReactiveDict序列化传递给会话的值。设置(键,值): Session.get(key)使用EJSON.parse将其反序列化: // https://g
meteor regexp会话测试
{{>测试}
点击按钮并查看控制台
你知道为什么这不起作用吗
提前感谢
Session
软件包在引擎盖下使用ReactiveDict
ReactiveDict
序列化传递给会话的值。设置(键,值)
:
Session.get(key)
使用EJSON.parse将其反序列化:
// https://github.com/meteor/meteor/blob/devel/packages/reactive-dict/reactive-dict.js
// line 8-12:
var parse = function (serialized) {
if (serialized === undefined || serialized === 'undefined')
return undefined;
return EJSON.parse(serialized);
};
这意味着Session
不支持RegExp
开箱即用
您的问题的解决方案是创建自定义的反应式数据源,该数据源的工作方式类似于会话
,但不会序列化/反序列化值对象
请看这里:
会话
软件包在引擎盖下使用反应dict
ReactiveDict
序列化传递给会话的值。设置(键,值)
:
Session.get(key)
使用EJSON.parse将其反序列化:
// https://github.com/meteor/meteor/blob/devel/packages/reactive-dict/reactive-dict.js
// line 8-12:
var parse = function (serialized) {
if (serialized === undefined || serialized === 'undefined')
return undefined;
return EJSON.parse(serialized);
};
这意味着Session
不支持RegExp
开箱即用
您的问题的解决方案是创建自定义的反应式数据源,该数据源的工作方式类似于会话
,但不会序列化/反序列化值对象
请看这里:
var regex = new RegExp('test');
Session.set('regex', regex.source);
...
var restoredRegex = new RegExp(Session.get('regex'));
console.log(restoredRegex);
请参阅:您需要保存正则表达式源:
var regex = new RegExp('test');
Session.set('regex', regex.source);
...
var restoredRegex = new RegExp(Session.get('regex'));
console.log(restoredRegex);
请参阅:有一种简便的方法可以教EJSON如何序列化/解析此问题中记录的正则表达式(RegExp): 基本上,我们可以扩展RegExp对象类,并使用
EJSON.addType
将序列化传授给客户机和服务器。这些选项是足够重要的正则表达式,您应该能够将它们存储在完全有效的JSON中的任意位置
希望这能帮助宇宙中的某个人。:) 有一种简便的方法可以教EJSON如何序列化/解析此问题中记录的正则表达式(RegExp): 基本上,我们可以扩展RegExp对象类,并使用
EJSON.addType
将序列化传授给客户机和服务器。这些选项是足够重要的正则表达式,您应该能够将它们存储在完全有效的JSON中的任意位置
希望这能帮助宇宙中的某个人。:) 哇,谢谢。不知道会话与EJSON反序列化。另一个被动数据源可能是本地集合(myQuery=newmeteor.Collection(null))。或者我可以使用,以便将查询保存为字符串。我喜欢eventedmind视频-可能会解决这个问题。哇,谢谢。不知道会话与EJSON反序列化。另一个被动数据源可能是本地集合(myQuery=newmeteor.Collection(null))。或者我可以使用,以便将查询保存为字符串。我喜欢eventedmind视频-可能会解决这个问题。谢谢你的回答,但我不会这样做,而是将参数“test”保存到会话中,然后创建一个新的RegExp对象。问题是,我正在创建一个可能包含多个键值的查询对象(其中一些值应该是RegExp对象,而另一些则不是)。另一种可能是将一个会话变量中的所有regexp值和其他所有regexp值保存到另一个会话变量中……感谢您的回答,但我不会这样做,而是将参数“test”保存到会话中,然后创建一个新的regexp对象。问题是,我正在创建一个可能包含多个键值的查询对象(其中一些值应该是RegExp对象,而另一些则不是)。另一种可能是将所有regexp值保存在一个会话变量中,并将所有其他值保存到另一个会话变量中……这应该是正确的答案。将自定义类型添加到EJSON是一个不错的选择,因为不仅反应型数据源将支持该类型,而且这些类型可以通过DDP通过线路发送、存储在集合中等。这应该是正确的答案。将自定义类型添加到EJSON是一种可行的方法,因为不仅反应式数据源将支持该类型,而且这些类型可以通过DDP通过线路发送、存储在集合中等。
var regex = new RegExp('test');
Session.set('regex', regex.source);
...
var restoredRegex = new RegExp(Session.get('regex'));
console.log(restoredRegex);