Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.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
使用require()或/!json!CouchDB中的代码?_Couchdb_Node.js - Fatal编程技术网

使用require()或/!json!CouchDB中的代码?

使用require()或/!json!CouchDB中的代码?,couchdb,node.js,Couchdb,Node.js,在本文中,作者说您可以使用: // !json templates.edit // !json blog // !code vendor/couchapp/path.js // !code vendor/couchapp/template.js 但既然可以使用require(),为什么还要使用这些宏呢 在某些情况下,我想改用宏吗?基本上,这只是在使用CouchDB时才感兴趣 它允许更容易地将数据与显示功能分离。 通常CouchDB使用Mozilla的SpiderMonkey JavaScrip

在本文中,作者说您可以使用:

// !json templates.edit
// !json blog
// !code vendor/couchapp/path.js
// !code vendor/couchapp/template.js
但既然可以使用require(),为什么还要使用这些宏呢


在某些情况下,我想改用宏吗?

基本上,这只是在使用CouchDB时才感兴趣

它允许更容易地将数据与显示功能分离。
通常CouchDB使用Mozilla的SpiderMonkey JavaScript引擎来呈现视图,因此没有可用的CommonJS实现

基本上,CouchApp允许您使用那些JavaScript“show”函数(存储在数据库中)来呈现HTML


因此,就Node.js而言,不,使用宏是没有意义的。另外,我很快浏览了Node.js的两个可用CouchDB模块的介绍,找不到对宏的任何支持,这进一步表明这是一些CouchApp特定的功能。

这是CommonJS模块引入CouchDB之前的一个功能。这些宏现在已经过时了。

目前它们都还在使用中。虽然使用
require
看起来更干净,但调试起来更困难,因为依赖关系是在运行时评估的。使用宏,在推到coach之前查找代码,只是为了添加一些相关的东西,我发现作为CouchDB的新手,这些东西很有用

首先,
require()
函数似乎不能包含设计文档附件,这意味着如果要在客户端和服务器上都包含相同的脚本,就不能像预期的那样将它们放在附件中

也就是说,如果设计文档有一个包含Javascript的属性
somewhere.foo
,则以下操作可以正常工作:

var js = require('somewhere/foo')
这并不是:

var js = require('_attachments/foo')
错误是(我使用的是CouchDB v1.6):

因此,我一直将脚本作为属性而不是附件放在设计文档中。这意味着可以通过
require()
在服务器上访问它们,也可以通过show函数在客户端上访问它们

其次,只有
require()
ing Javascript是可能的,这意味着您不能使用它来包含(比如)作为设计文档属性上传的HTML模板

!代码
!couchapp支持的json
指令在这里没有多大帮助。(更不用说让他们工作我似乎没有多大成功…)

我发现对模板有用的技巧是,您可以使用
this
直接在显示和视图中访问设计文档属性。因此,给定一个设计文档属性
templates.edit
,它可以:

var template = this.templates.edit;
这很好地结合在一起,因为它还可以用来提供一个show函数,该函数提供作为属性嵌入的Javascript。假设这是在设计文档的
shows.myscript
属性中:

function(doc, req) {
    return this.js.myscript;
}

然后URL
http://localhost:5984//_design//_show/myscript
将提供给客户端,这意味着您可以在HTML中引用它。如果您愿意,还可以使用show函数将以这种方式嵌入的多个脚本连接并最小化到一个包中。

那么我想知道为什么它们仍然存在于CouchDB权威指南中,因为人们可能仍在运行旧版本?嗯……我们如何使用require()包含html模板?我一直在到处搜索,试图找出这个问题:如何在show函数中引用html模板?我可以使用require()吗?在kan.so查看Kanso工具。它允许使用基于公共JS的替代方法。@Costa:也许对你来说太晚了,但请看我的答案here@wu-李,哈哈,谢谢你,伙计!我已经很久没有和库查普斯一起玩了。
function(doc, req) {
    return this.js.myscript;
}