Category Archives: JavaScript

使用Express模版引擎

需要使用下面的express应用设置,Express才能正确的处理模版文件。
views — 指定模版文件的目录,例如app.set(‘views’, ‘./views’)
view engine — 指定模版引擎,例如app.set(‘view engine’, ‘jade’)
首先要使用npm安装模版引擎jade。关于Jade,官网Jade Template Engine ,一个不错的教程Jade — 源于 Node.js 的 HTML 模板引擎

例如Jade这种Express兼容的模版引擎,会导出名为 __express(filePath, options, callback)的function,并可以通过res.render()来渲染模版代码。
一旦设定了视图模版引擎,你不需要显式地指定引擎或在应用程序加载模板引擎模块。Express会在内部自动加载它。例如:

在views目录下创建一个jade模版文件”index.jade”, 内容如下:

然后创建一个route来渲染”index.jade”文件。如果没有指定模版引擎,则需要指定view文件的扩展名。

使用node app.js来启动应用,一旦有到’/’的请求时,”index.jade”会作为HTML来渲染。
view_render

参考:
Using Template Engines

Posted in JavaScript.

使用Mongoose

Mongoose提供了一个直观的、基于模式(schema)的解决方案,可以为你的应用数据使用内置的类型转换、验证、查询和业务逻辑来建模。本文简述在Node.js中使用Mongoose连接MongoDB的方法。 Continue reading

Posted in Dev, JavaScript, NoSQL.

JSON in JavaScript

JavaScript中,JSON对象解析JavaScript Object Notation (JSON) 以及将值转换成JSON的方法。JSON对象不能被构建和直接调用,它仅提供了两个工具的方法——Parse和stringtify。 Continue reading

Posted in Dev, JavaScript.

node.js连接Oracle数据库

接触了Node.js大概有一周时间了。异步的非阻塞编程很适合服务器端大量数据库/IO等信息的获取,减少了服务器线程的数量和负载。
第一步是配置Oracle的连接,Oracle的node.js driver基本都依赖于OCCI(Oracle C++ Call Interface),一共有两三个实现。其中node-oracle应该是比较稳定的一个。通过npm编译安装连接Oracle有些麻烦,下面是安装配置的方法。 Continue reading

Posted in Dev, JavaScript, Oracle.

MongoDB Two-phase Commit

先恶补一下分布式事务中事务的各类提交机制:(关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究)
NoSQL并没有关系数据库那么严格的事务机制,所以在NoSQL中能否很好的实现事务功能体现了开发人员的功力。两段式提交保证了分布式XA规范的分布式事务的原子性。两段指prepare阶段和commit阶段:

Continue reading

Posted in Database, JavaScript, NoSQL.

MongoDB Replica Set

一个replica set可以看作一个带故障转移的Master-Slave复制集群,它在primary节点失效后(或者secondaries不能访问primary时)会自动选举secondary节点成为master。replica set需要保证实例之间相互了解生存状态,所以需要n*(n-1)*2条心跳检测链路。在集群有一定规模时增加了网络的负担。如果使用开发语言的Driver指定了replica set中的一些server,那么driver会自动引入replica set中所有的server并自动在primary失效后故障转移到其他节点。

Replica Set Members

Replica set最多可以有12个成员,但是只有7个成员能同时投票。成员的角色分为:
Primary 同master节点,可以执行write操作。
Secondary 同Slave节点,接收并复制Primary节点的操作。可以进行一些其他配置:如设置为Non-Voting或优先级
Arbiter 不进行数据复制,只在primary失效后参与投票。
Continue reading

Posted in Database, JavaScript, NoSQL.

MongoDB Aggregation

《Seven Database in Seven Weeks》提供了一个较好的数据实例:

那么最终生成的文档如下:

下面使用上面的文档来测试

统计得到的结果的数量

Continue reading

Posted in Database, JavaScript, NoSQL.

MongoDB Cursor

在Oracle这样的关系数据库中,游标是SQL的一个内存工作区,其作用就是用于临时存储从数据库中提取的结果数据块。Oracle的游标在PL/SQL编写存储过程时会经常用到,可以用于一些特殊的控制和曹走。而MongoDB也提供了游标这个定义—当然MongoDB的”存储过程”就是一段javascript的代码块。
Continue reading

Posted in Database, JavaScript, NoSQL.

MongoDB Casbah运算符

Casbah通过运算符提供了非常灵活的语法,用于构建DBObject文档对象。
Continue reading

Posted in Database, JavaScript, NoSQL.

Mongo – Class One

1. Concept

MongoDB的文档数据库特性表示对非结构化存储的支持非常好,即不能确定表的列结构的数据。这类数据无法固定模式/模型,数据结构持续变化中,数据库管理员和开发人员的压力被扩大。但多媒体这类二进制数据为”非结构化“数据并不准备。例如:调查表。每个被调查公司的调查项都不一样

MongoDB具有一些特点

· 面向文档的存储引擎,可以方便支持非结构化数据
· 全面的索引支持,可以在任意属性上建立索引
· 数据库本身内置的复制和高可用
· 数据库本身支持的自动分片集群
· 丰富的基于文档的查询功能
· 原子化的数据操作
· 支持Map/Reduce
· GridFS

MongoDB有下面三种逻辑对象

文档:mongoDB的“行”以json的形式表示(key-value的集合),称为一个document(文档),例如{“foo”:3, “greeting”:”hello world”}。注意一个文档中的key不能重复。文档中可以嵌入文档。
集合:一组文档的集合,文档类似于关系数据库中的行而集合类似于关系数据库里的表。集合是无模式的,即集合中的文档可以五花八门,没有固定格式。
数据库:由多个集合组成
Continue reading

Posted in Database, JavaScript, NoSQL.