Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Meteor:将RegExp对象保存到会话_Javascript_Regex_Mongodb_Session_Meteor - Fatal编程技术网

Javascript Meteor:将RegExp对象保存到会话

Javascript 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

我试图在MongoDB查询的Meteor会话中将正则表达式保存为RegExp对象,但在Session.get()之后,RegExp对象只是一个空对象

js

html


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