`
裴小星
  • 浏览: 265848 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
8ccf5db2-0d60-335f-a337-3c30d2feabdb
Java NIO翻译
浏览量:27853
F3e939f0-dc16-3d6e-8c0b-3315c810fb91
PureJS开发过程详解
浏览量:74389
07a6d496-dc19-3c71-92cf-92edb5203cef
MongoDB Java ...
浏览量:63081
社区版块
存档分类
最新评论

Pure JS (4.2): Web 应用中服务器端 JS 调用 MongoDB 的简单示例

阅读更多
Pure JS (4.2): Web 应用中服务器端 JS 调用 MongoDB 的简单示例

  接着上一篇文章,本文将通过一个简单的示例说明如何通过服务器端 JS 调用 MogoDB,以及客户端 JS 向服务器端发起请求的方式。
  首先我们可以先运行示例程序,然后我将介绍整体流程,最后我们再具体看看客户端 JS 和服务器端 JS 是如何编写的。
  我们将看到通过使用 JavaScript Object 贯穿整个数据流程的模式是如何简化我们的开发的。

运行示例

  下载附件,并将工程添加到 eclipse 中,配置 Java 7 JDK ,在命令行中运行 mongod;
  打开文件 main/purejs/core/JSServer.java,鼠标右键 -> Run As -> Java Application 。
  在浏览器中输入 http://localhost:8080 进行访问,将看到如下界面:


  这个例子非常简单,只包括一个 users 列表,对每条数据可以执行两个操作:
  1. 修改 description,并点击 Save 进行保存
  2. 点击 Delete 删除对应的 user

  最后一行用于增加 user ,可以执行两个操作:
  1. 输入 name 和 description,并点击 Add 增加记录
  2. 点击 Clear ,清空 name 和 description ,重新输入


  每次操作完成后,users 列表将重新排序。

整体流程


  我们可以直接以 JavaScript 对象作为 MongoDB 数据操作的参数,因此直接从客户端传递一个对象到服务器端是较好的方式。
引用
  虽然实际上也可以从客户端传递一段代码 (Function.toString())到服务器端,但这么做具有安全隐患,因为客户端也可能传递一段具有破坏性的代码。
  另外出于安全性的考虑,实际上经常需要对用户的身份和接收到的参数进行验证,这里简单起见,都省略了。

  具体的步骤包括:
  1.客户端 JS 处理界面事件,在 request 中指定执行操作的 controller 和 action,并将请求封装为 request.params 对象
  2.服务器端接收到 request 对象后,调用所指定的 controller 的 action 函数,并将 request.params 作为参数传入
  3.controller 中,通常需要从 MongoDB 获取 collection ,然后对这个 conllection 进行相应的操作。

  我们可以用一张草图表示这个流程:



  接下来让我们结合例子进行说明。


客户端 JS

  客户端 js 位于 webapp/js/index.js ,处理界面操作,并向服务器端发起请求。
  除去一些界面操作的代码,客户端向服务器端发起请求的地方有三处:

  获取 users 列表
pure.post('users.list', function(data) {
	users = data;
	render();
});

  第一个参数指定了处理请求的 controller “users” 和需要执行的操作 “list”,
  第二个参数表示请求成功时执行的函数,这里将 data 赋值给闭包中的变量 users ,并渲染页面。

  保存 user
pure.post({ action: 'users.save', params: user });

  第一个参数采用了 request 对象的方式,包含 action 和 params 两个属性。
    【action: 'users.save'】:指定了 controller “users” 和操作 “save”
    【params: user】:直接将 user 作为请求参数发送到服务器端进行保存。

  删除 user
pure.post({ action: 'users.remove', params: name });

  【action: 'users.remove'】:指定了 controller “users” 和操作 “remove”
  【params: name】:将 user 的名称作为请求参数发送到服务器端作为删除的查询条件。

  pure.post 参数说明

  第一个参数:request 对象,也可以接收 String 类型,将知道转为 { action: ... } 的形式。
  requset 对象又可以包括两个属性:
    【action】:形如 "contoller.action" 的字符串,标志处理请求的 controller ,和需要执行的操作
    【params】:执行操作所需的参数,可以是 object 或基本类型。

  第二个参数:请求成功时执行的函数,这个函数可以以参数形式接收返回的数据 ( result.data )
  第三个参数:请求失败时执行的函数,这个函数可以以参数形式接收错误信息 ( result.error )



服务器端 JS

  服务器端 js 位于 scripts/app/api.users.js,根据获得的参数,对 MongoDB 的 conllection 进行操作 。

  服务器端的 api.users 对象实现了三个方法:
  1. list :获取 users 列表;当 users 为空时,进行数据初始化
  2. save :保存 user,以 name 作为查询条件,创建或更新 user
  3. remove : 删除 user,以 name 作为查询条件移除特定的 user

  实现如下:
var api = api || {};

api.users = function(){
	var users = pure.db.get('users');
	return {
		list: function() {
			if (!users.count()) {
				// Initialize ...
			}

			return users.$list();
		},
		save: function(params) {
			var q = { name: params.name };
			users.update(q, params, true, false);
		},
		remove: function(params) {
			users.remove({ name: params });
		}
	}
}();

  首先通过 pure.db.get('users') 获取名为 “users” 的 collection,然后利用这个 collection 实现对应的操作。
  数据初始化的代码后面还会继续探讨,这里就先省略了。

  这段代码中涉及了几个 users 的方法:

  users.count()
  表示统计 users 的数量。

  users.$list()

  表示获取 users 列表, “$”表示将 DBCursor 转换为 JavaScript 数组。
  这个例子是在客户端进行排序的,如果需要在服务器端进行排序,可以使用如下代码:
return user.list.$sort({ name: 1 });


  users.update(q, params, true, false)
  根据查询条件 q 获取对象,对象存在则更新,否则创建新的对象。

  users.remove({ name: params })
  根据查询条件获取对象并删除。


  接下来我们看看数据初始化的部分:
pure.db.eval(function(){
	var users = db.users;
	users.drop();
	users.ensureIndex({ name: 1 });

	users.insert({ name: 'user1', desc: 'desc1' });
	users.insert({ name: 'user2', desc: 'desc2' });
	users.insert({ name: 'user3', desc: 'desc3' });
});

  我们使用 eval 进行数据的初始化,pure.db.eval 可以接受 String 或 Function 类型的参数,Function 实际上也是转为 String 执行的。

  初始化的操作包括:
  1.通过 users.drop() 删除 collection
  2.在 name 上建立索引,并且排序方式为升序
  3.插入三个 users 对象

总结

  客户端和服务器端都使用 JavaScript 进行编程,MongoDB 也有支持 JavaScript 的API,因此我们可以以一个 JavaScript 对象作为参数贯穿整个流程;
  这将大大简化我们的开发,并且理解上也十分直观,这也正是“ Pure JS ”想要达到的效果。

  下一篇文章将介绍 pure.db.js 是如何对 MongoDB 的数据操作进行封装的,以及一些与 MogoDB Driver 有关的内容。
3
1
分享到:
评论

相关推荐

    Pure JS (4.3): pure.db.js 的实现(基于 MongoDB Rhino Driver)

    《纯JavaScript实现:pure.db.js基于MongoDB Rhino Driver详解》 在JavaScript的世界里,数据库操作通常依赖于服务器端的语言支持,如PHP、Python或Node.js等。然而,有一种另辟蹊径的方式,即通过Rhino JavaScript...

    Node.js+MongoDB+AngularJS Web开发

    Node.js 是一种领先的服务器端编程环境,MongoDB是最流行的NoSQL数据库,而AngularJS 正迅速成为基于MVC的前端开发的领先框架。它们结合在一起使得能够完全用JavaScript 创建从服务器到客户端浏览器的高性能站点和...

    MongoDB应用设计模式

    资源名称:MongoDB应用设计模式内容简介:无论是在...通过使用Python和Javascript代码示例,你将了解MongoDB如何扩展数据模型,同时还可以简化开发 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    Pure JS (4.1): 使用 MongoDB 进行数据存储和管理

    **标题解析:** "Pure JS (4.1): 使用 MongoDB 进行数据存储和管理" 暗示本文将探讨如何使用纯JavaScript与MongoDB数据库进行交互,以实现数据的存储和管理,而不依赖任何特定的前端或后端框架。 **描述分析:** ...

    Node.js MongoDB AngularJSWeb开发.part3

    Node.js 是一个基于Chrome V8引擎的JavaScript运行环境,它允许开发者在服务器端使用JavaScript进行编程,实现了全栈JavaScript开发。Node.js的特点包括非阻塞I/O模型和事件驱动,使其在处理高并发请求时表现出色,...

    《Node应用程序构建:使用MongoDB和Backbone》 源码

    1. **Node.js**:Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它允许开发者在服务器端使用JavaScript进行编程。Node.js采用事件驱动、非阻塞I/O模型,使其轻量又高效,特别适合数据密集型实时应用。 2. *...

    spring4.2 mongodb 全部jar包

    在IT行业中,Spring框架与MongoDB的集成是常见的开发需求,尤其在4.2版本时,Spring提供了对MongoDB的强大支持。本知识点将详细介绍Spring 4.2与MongoDB的集成,以及涉及到的相关jar包。 首先,Spring 4.2是Spring...

    Nodejs+Angular+Mongodb-Web-Demo

    这是一个基于Node.js、Angular和MongoDB构建的Web应用程序示例,我们将其称为“Nodejs+Angular+Mongodb-Web-Demo”。在这个项目中,你将看到如何整合这三种技术来创建一个功能丰富的交互式Web应用。 **Node.js** ...

    Node应用程序构建——使用MongoDB和Backbone

    在本文中,我们将深入探讨如何使用Node.js构建应用程序,并结合MongoDB数据库以及Backbone.js作为前端框架,实现数据的高效管理和交互。Node.js是基于Chrome V8引擎的JavaScript运行环境,它让JavaScript能够运行在...

    MongoDB4.2分片及副本集群搭建

    MongoDB4.2分片及副本集群搭建 MongoDB集群 MongoDB分片 MongoDB副本 MongoDB副本集群

    Node.js MongoDB AngularJSWeb开发.part2

    在本主题中,我们将深入探讨三个关键的技术领域:Node.js、MongoDB以及AngularJS,这些都是现代Web开发中的重要组成部分。这些技术的结合使得开发者能够构建高效、可扩展且功能丰富的Web应用程序。 首先,Node.js是...

    NodeJS+MongoDB+AngularJS WEB开发原版

    《NodeJS+MongoDB+AngularJS WEB开发原版》是一本深入探讨现代Web开发技术的书籍,特别关注了使用Node.js、MongoDB和AngularJS构建全栈应用的实践方法。Node.js是基于Chrome V8引擎的JavaScript运行环境,它允许...

    mongodb 简易系统.zip

    MongoDB简易系统是一个基于Web的项目,主要使用了MongoDB作为数据库存储,Node.js作为后端服务器框架,构建了一个轻量级的系统。这个压缩包可能包含了一个初始的示例项目,名为"demo_01",用于展示如何集成这些技术...

    node.js结合mongodb构建的web项目

    在本项目中,我们探索如何使用Node.js与MongoDB构建一个功能完备的Web应用程序。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它允许我们在服务器端使用JavaScript,极大地提升了开发效率。MongoDB则是一个...

    MongoDB4.2.21 Linux版本安装包

    MongoDB是一款高性能、无模式的分布式文档型数据库,被广泛应用于大数据分析、内容管理系统、物联网(IoT)、实时应用程序和地理位置数据存储等场景。在Linux环境下安装MongoDB 4.2.21版本,是许多系统管理员和开发者...

    Node.js/MongoDB/AngularJS Web开发源码和书

    作者Brad Dayley是IT行业的资深专家,他在书中详细阐述了如何利用Node.js作为后端服务器,MongoDB作为数据存储,以及AngularJS作为前端框架,构建高效、动态且响应式的Web应用。 Node.js是一个基于Chrome V8引擎的...

    Node JS + MongoDB技术讲座

    Node.js 是一种基于 Chrome V8 引擎的 JavaScript 运行环境,它允许开发者使用 JavaScript 编写服务器端应用程序。Node.js 使用了一个事件驱动、非阻塞 I/O 模型,使其轻量又高效,特别适合构建实时、可扩展的网络...

    《Node.js+MongoDB+AngularJS Web开发》源代码

    在实际项目中,Node.js通常会使用Express框架,它为Node.js提供了一套简单易用的Web应用API。MongoDB则可能通过Mongoose这样的ODM(Object Document Mapper)库来简化数据操作。AngularJS可能结合Bootstrap或其他CSS...

Global site tag (gtag.js) - Google Analytics