如何集成 CouchApp、Node.JS、Sammy 和 Mustache

Posted

技术标签:

【中文标题】如何集成 CouchApp、Node.JS、Sammy 和 Mustache【英文标题】:How to integrate CouchApp, Node.JS, Sammy and Mustache 【发布时间】:2011-08-13 06:59:17 【问题描述】:

我设置了一个 node.couchapp.js CouchApp 并将其推送到我的 CouchDB。默认包含 Sammy 和 jQuery。现在,我想为模板添加 Mustache,但不知道在哪里?我可以将它用作 Node.js 模块或 jQuery 插件。

我从一些示例代码开始,只是想看看它是否有效,但它没有:

ddoc.lists = 
"basic": "function (head, req)  var that = this; provides('html', function ()  var to_html = require('modules/mustache').to_html; var members = []; var row; while (row = getRow())  members.push(club: row.key[0], name: row.key[1]);  return to_html(that.templates['roster.mustache'],  members: members ); ) "
;

结果:

"error":"invalid_require_path","reason":"Object has no property \"modules\". ...

项目结构为:

. Project
| - app.js
| - attachments
| - - scripts
| ` - index.html
| - modules
|   | mustache
| - ` - mustache.js
` - templates

更新 我稍微修改了代码并排除了模板文件夹作为可能的原因。这个 sn-p 来自 SO 上的一个已解决问题,因此它应该可以正常工作。但它仍然是同样的错误。我使用 npm install mustache 安装了 mustache.js,并将文件夹从 node_modules 重命名为 modules(也不适用于 node_modules)。

"basic": "function (head, req)  provides('html', function ()  var template = '%IMPLICIT-ITERATORname: <ul> #items<li>.</li>/items </ul>'; var mustache = require('./modules/mustache/mustache.js'); return mustache.to_html(template,view););"

但它仍然是同样的错误。

【问题讨论】:

require('modules/mustache') 替换为require('./modules/mustache/mustache.js') 现在它说:"error":"invalid_require_path","re​​ason":"Object has no parent undefined" 【参考方案1】:

我不确定您遇到的具体错误,但对于您的问题: “现在,我想为模板添加 Mustache,但不知道在哪里?我可以将它用作 Node.js 模块或 jQuery 插件。”

您可以在两者中使用它。

由于 Node.js 在服务器端运行,这有效地为您提供了一种定义模板一次(在本例中使用 Mustache)并在服务器端(使用 Node.js)和客户端(使用jquery 插件)。

只是为了概述(您可能已经知道这一点): 想象一下呈现产品的搜索结果:

传统方式是使用一些服务器端模板引擎渲染产品。

现在,假设您要启用搜索结果的过滤/排序。一般来说,您有 3 个选项:

    对服务器进行正常(非 ajax 调用),进行服务器端模板化并输出新页面 对服务器进行 ajax 调用,进行服务器端模板化并输出 html,在客户端获取它并将其插入到 dom 元素中。 对服务器进行 ajax 调用,生成一个 json 对象,然后使用客户端模板引擎(例如 Mustache)将其呈现到 dom 元素中。

从可用性的角度来看,选项 3 可以说是最佳解决方案。 (快速、低带宽、无页面闪烁或页面跳转等)。但是,如果需要,请考虑 SEO 的后备/非 js 方式。

然而,在实施选项 3 时,您现在需要一种服务器端模板语言来在初始页面加载时呈现产品,并需要一种客户端模板语言来呈现从后续 ajax 调用返回的产品。两者都产生完全相同的html。不是很干。

这里 node.js 发挥作用,它消除了编写单独的服务器端模板的需要。相反,只需让 node.js 使用您在客户端使用的完全相同的 mustache 模板输出初始页面。

当然,您可以走唯一的客户端路线:在初始页面加载时也输出 json,然后在客户端上呈现。从 seo 的角度来看,这当然很糟糕。但是,有些应用程序不会对搜索引擎进行索引,在这种情况下,“一切都在客户端”方法是一个不错的选择。

一些相关问题:

Client-side templating language with java compiler as well (DRY templating) Good DRY approach to rendering and AJAX updating of page

【讨论】:

非常感谢!只要我想使用一种编程语言,它就会给我一个很好的、可以理解的错误信息。仍然得到同样的错误,没有任何线索是什么问题。 :( 我自己并没有真正进入 couchDB,但快速谷歌上(“对象没有属性”“invalid_require_path”)给了我:comments.gmane.org/gmane.comp.db.couchdb.user/11636,它又指的是:***.com/questions/4394595/…。希望有帮助 不,不幸的是,这不是同一个错误。我已经浏览了所有的谷歌结果。

以上是关于如何集成 CouchApp、Node.JS、Sammy 和 Mustache的主要内容,如果未能解决你的问题,请参考以下文章

couchdb - 将遗留身份验证模块集成到 couchapp

打开新的集成终端VSCode Mac时如何运行安装node.js?

Typescript / Node.js - 如何模拟集成测试的传递依赖项?

Node.js 和 ActiveMQ 之间的集成 - 如何使用

如何将移动发起的视频通话与基于 Web 的 [node.js] 视频通话集成?

AngularJS、Node.js、ExpressJS 应用程序集成问题