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 ...