我有一个任意的(E)JSON,可以在我的Meteor应用程序中通过客户端将其创建并通过电线发送到服务器。它使用RegExp
对象将结果归零:
# on the client
selector =
"roles.user": { "$ne": null }
"profile.email": /^admin@/gi
在客户端,一切都很好,但是如果我通过Meteor.call
或将其传递给服务器Meteor.subscribe
,则生成的(E)JSON采用以下形式:
# on the server
selector =
"roles.user": { "$ne": null }
"profile.email": {}
…某处工程师在内部死亡。
Web上有大量资源说明为什么RegEx无法通过JSON.stringify
/ JSON.parse
或等效EJSON
方法进行序列化。
我不认为RegEx序列化是不可能的。那怎么办呢?
在查看了HowTo和Meteor
EJSON文档之后
,我们可以使用EJSON.addType
方法序列化RegEx
。
扩展RegExp- 为RegExp提供EJSON.addType
实现所需的方法。
RegExp::options = ->
opts = []
opts.push 'g' if @global
opts.push 'i' if @ignoreCase
opts.push 'm' if @multiline
return opts.join('')
RegExp::clone = ->
self = @
return new RegExp(self.source, self.options())
RegExp::equals = (other) ->
self = @
if other isnt instanceOf RegExp
return false
return EJSON.stringify(self) is EJSON.stringify(other)
RegExp::typeName = ->
return "RegExp"
RegExp::toJSONValue = ->
self = @
return {
'regex': self.source
'options': self.options()
}
呼叫EJSON.addType- 在任何地方进行。最好使它可用于客户端和服务器。这将反序列化toJSONValue
上面定义的对象。
EJSON.addType "RegExp", (value) ->
return new RegExp(value['regex'], value['options'])
在控制台中测试 -不要相信我。你自己看。
> o = EJSON.stringify(/^Mooo/ig)
"{"$type":"RegExp","$value":{"regex":"^Mooo","options":"ig"}}"
> EJSON.parse(o)
/^Mooo/gi
这样一来,您就可以在客户端和服务器上对RegExp进行序列化和解析,可以通过有线传递,保存在Session中,甚至可以存储在查询集合中!
编辑以添加IE10 +错误:错误:在严格模式下 , 不允许分配只读属性 由@Tim Fletcher提供
import { EJSON } from 'meteor/ejson';
function getOptions(self) {
const opts = [];
if (self.global) opts.push('g');
if (self.ignoreCase) opts.push('i');
if (self.multiline) opts.push('m');
return opts.join('');
}
RegExp.prototype.clone = function clone() {
return new RegExp(this.source, getOptions(this));
};
RegExp.prototype.equals = function equals(other) {
if (!(other instanceof RegExp)) return false;
return EJSON.stringify(this) === EJSON.stringify(other);
};
RegExp.prototype.typeName = function typeName() {
return 'RegExp';
};
RegExp.prototype.toJSONValue = function toJSONValue() {
return { regex: this.source, options: getOptions(this) };
};
EJSON.addType('RegExp', value => new RegExp(value.regex, value.options));
问题内容: 我对Ajax和JSON足够熟悉,可以发送请求并解析JSON请求。理想情况下,我希望收到多个响应以定期更新进度条。这样客户可以得到积极的反馈。 我听说过JSON流,但没有找到有关如何实现此功能的好资源。有谁知道好的资源或如何做到这一点? 问题答案: JSON只是通过HTTP协议传输的另一种数据格式(例如文本,html,pdf等)。您可能指的是cometd。 这使您可以打开持久连接,并将数
本文向大家介绍详解Android客户端与服务器交互方式,包括了详解Android客户端与服务器交互方式的使用技巧和注意事项,需要的朋友参考一下 最近的Android项目开发过程中一个问题困扰自己很长时间,Android客户端与服务器交互有几种方式,最常见的就是webservices和json。要在Android手机客户端与pc服务器交互,需要满足下面几种条件:跨平台、传输数据格式标准、交互方便。
在简介一节中我们提到,客户端层暴露了一个供人类使用的用户界面。 客户端由两部分组成:一个只读的简单 HTML 页面和一个可交互的单页 JavaScript 应用。两者都从 JSON API 读取数据。 路由 论坛所有的默认路由都在 Flarum\Forum\ForumServiceProvider 中注册。每个路由有一个对应的 Action (动作)类, 这个类本质上就是控制器。每个动作接受一个
问题 你需要通过HTTP协议以客户端的方式访问多种服务。例如,下载数据或者与基于REST的API进行交互。 解决方案 对于简单的事情来说,通常使用 urllib.request 模块就够了。例如,发送一个简单的HTTP GET请求到远程的服务上,可以这样做: from urllib import request, parse # Base URL being accessed url = 'ht
我目前正在考虑构建一个简单的MMORPG。 这个想法是拥有一个 .NET 服务器和可下载的客户端应用程序。 组织客户端-服务器交互的最简单而有效的方法是什么? 我想到了一个网络服务,但只要客户端必须快速执行许多游戏操作(例如移动、拾取物品、攻击其他玩家等),它看起来效率很低。 创建自定义通信协议是一项非常复杂的任务。 是否存在现成的解决方案?
我目前正在编写一个客户端/服务器Web应用程序使用JavaServlet和Python。虽然我在客户端交互方面遇到了问题,主要是在生成输入方面。生成输入需要通过在客户端本地执行python脚本来修改用户输入的数据,然后通过POST请求提交给Servlet服务器。在此之后,Servlet将把接收到的数据传递到另一个python脚本服务器端,以验证给定输入的有效性。Python在这个过程中是必要的,因