Javascript 提交前是否清理了地图/缩小功能?怎么用?

Javascript 提交前是否清理了地图/缩小功能?怎么用?,javascript,couchdb,Javascript,Couchdb,在couchdb中,可以用Javascript定义map和reduce函数,并通过httppost将它们提交到服务器以定义视图。酷 应用程序指定相应函数的字符串表示形式 我正在使用文本编辑器emacs构建一个连接到couchdb的JS应用程序。这使我可以定义映射和缩减函数,如下所示: var byname = function(doc) { emit(doc.name,null); }; 这为我提供了emacs语法高亮显示、jslint检查等功能 在运行时,我可以获得一组视图函数中每一

在couchdb中,可以用Javascript定义map和reduce函数,并通过httppost将它们提交到服务器以定义视图。酷

应用程序指定相应函数的字符串表示形式

我正在使用文本编辑器emacs构建一个连接到couchdb的JS应用程序。这使我可以定义映射和缩减函数,如下所示:

var byname = function(doc) { 
   emit(doc.name,null);
};
这为我提供了emacs语法高亮显示、jslint检查等功能

在运行时,我可以获得一组视图函数中每一个函数的字符串表示形式,将其发送到CouchDB,方法如下:

doc = { views: { empty:   { map:stringRep(empty) },
                 byname:  { map:stringRep(byname) },
                 invalid: { map:stringRep(invalid) }}};

// PUT that doc to couchdb here, to define the design_doc . 
但是字符串表示包括换行符、回车符等

我可以用一个正则表达式替换来过滤掉这些数据,这对于简单的情况很有效。 但函数中还有更复杂的注释行情况。例如:

var byname = function(doc) { 
   // a comment here
   emit(doc.name,null);
};
在本例中,stringRep将包含注释,但如果我删除了换行符和伪空白,注释将保留。我也可以替换这些,但可能还有其他问题(不确定)

在将javascript函数发送到couchdb之前,有没有一种典型的或推荐的方法可以让人们对其进行清理?没有

我们不仅不清理它们,我们还将它们放在cofeescript中的设计文件中,该文件由一个
蛋糕
任务插入,该任务会自动将它们转换为JS。


我们不仅不清理它们,还将它们放在cofeescript中的设计文件中,该文件由一个
蛋糕
任务插入,该任务会自动将它们转换为JS。

这就是我最后使用的:

CouchDB.stringRep = function(fn) {
    return fn.toString()
        .replace(/[\s\t]*\/\/.*$/gm, '') // comments
        .replace(/\n */gm, ' ')
        .replace(/\r */gm, ' ')
        .replace(/\{ +/gm, '{')
        .replace(/ +\}/gm, '}');
};
然后我上传以这种方式序列化的函数,带有这种HTTP消息:

PUT https://foo.cloudant.com/fop/_design/baseViews HTTP/1.1
Accept: text/plain,application/json
Accept-Language: en-us
User-Agent: Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)
Content-Length: ...
Host: foo.cloudant.com

{"views":{"empty":{"map":"function(doc) {if ( ! doc.observation || doc.observation === '') {emit(doc.id, 1);}}"},...}} 

这就是我最终使用的:

CouchDB.stringRep = function(fn) {
    return fn.toString()
        .replace(/[\s\t]*\/\/.*$/gm, '') // comments
        .replace(/\n */gm, ' ')
        .replace(/\r */gm, ' ')
        .replace(/\{ +/gm, '{')
        .replace(/ +\}/gm, '}');
};
然后我上传以这种方式序列化的函数,带有这种HTTP消息:

PUT https://foo.cloudant.com/fop/_design/baseViews HTTP/1.1
Accept: text/plain,application/json
Accept-Language: en-us
User-Agent: Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)
Content-Length: ...
Host: foo.cloudant.com

{"views":{"empty":{"map":"function(doc) {if ( ! doc.observation || doc.observation === '') {emit(doc.id, 1);}}"},...}} 

没有,没有什么特别的。它们由常规JavaScript引擎(SpiderMonkey)解释/编译,不需要任何预处理或清理等。像编写其他脚本一样编写它们


网络上使用的大多数实践都有完全相同的含义或效果——如果您设法将数千种不同的功能发送到DB并希望节省带宽,您可以缩小发送的所有内容;您可以将其他语言的代码编译成JS等。

不,没有什么特别的。它们由常规JavaScript引擎(SpiderMonkey)解释/编译,不需要任何预处理或清理等。像编写其他脚本一样编写它们

网络上使用的大多数实践都有完全相同的含义或效果——如果您设法将数千种不同的功能发送到DB并希望节省带宽,您可以缩小发送的所有内容;您可以将其他语言的代码编译成JS等