首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 Node.js 和 dashDB 服务开发一个公共交通系统模拟器(2)

使用 Node.js 和 dashDB 服务开发一个公共交通系统模拟器(2)

3. 更新 package.json                                文件当您从运行时创建 node.js 时,package.json 文件被构建。
以下键被添加到 dependencies 下面,以便启用 DB2® 上的访问。
1
"ibm_db" :"~0.0.1",




所有 "jade" 都被更改为 "ejs"。
1
"jade" :"*" to "ejs" :"*"




EJS 和 JADE 是由 Node.js Express 使用的模板引擎,通过服务器来构建 Web 页面:
  • EJS 直接添加了 JavaScript 逻辑,并将值导入 HTML 代码串。
  • JADE 是一个完整的模板语言,有它自己的语法和文档。
这两个模板引擎与客户端配合良好,在 Node.js 应用程序上都非常受欢迎。我们选择了 EJS,因为它类似于普通的 HTML 和 HTML 标记。
4. 修改 app.jsApp.js 是一个 Node.js 应用程序中最重要的 JavaScript 文档。它使用 Express 框架来控制服务器的行为,Express                                是一个易于使用的框架,适用于事件驱动(实时)的 Web 应用程序。更新您的应用程序,以便使用示例应用程序所使用的设置,请进行以下更改:
  • 将 view_engine 更改为读取 ejs,而不是读取 jade。
  • 创建一个变量,并要求 ibmdb 开始在项目上使用 DB2。
  • 在基本的 node.js 的第 36 行,找到注释 TODO,它提供了变量                                        service,检索与数据库连接的服务信息。
  • 添加下面的代码,完成服务器端的准备工作,并接收来自客户端的 POST。                                               
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    db2 = services['BLUAcceleration-10.5.3 Rev. A Build 0.1'][0].credentials;
    //It will get specific credentials to log in your BLU Acceleration
    var connString = "DRIVER={DB2};DATABASE=" + db2.db + ";
    UID=" + db2.username + "WD=" + db2.password + ";
    HOSTNAME=" + db2.hostname + ";port=" + db2.port;
    //String built, required by ibmdb module.

    /* app.post receives 2 parameters:
    * '/' -> path that will receive the post.
    * function(ibmdb, connString, db2.username) -> The callback
    * function.It will receive the ibmdb variable, the connString
    * created and the db2.username that changes according to Bluemix.
    *
    * It will connect on db2 once a post method is sent by the
    * client-side using $.post jQuery function.
    *
    * A JSON object can be received by the client-side the req.body
    * object. this function is written to receive objects named table,  
    * columns and/or extras.
    */

    app.post('/', function(ibmdb, connString, db2.username){
        return function(req, res){
            ibmdb.open(connString, function(err, conn) {
                if (err ) {
                    res.send("error occurred " + err.message);
                } else {
                    var extra;
                    if(req.body.columns){
                        query = req.body.columns.join(", ");
                    } else {
                        query = '*';}
                         
                    if(req.body.extra){
                        extra = req.body.extra;
                    } else {
                        extra = '';
                        };
                    query = "SELECT " + query + " FROM " +
                    db2.username + "."+ req.body.table + " " +
                    extra; //Change this query according to your application.
                    conn.query(query, function(err, tables){
                        if ( !err ) {
                            res.json(tables);
                        } else {
                            res.send("error occurred " + err.message);
                        }                  
                    });
                }   
            });
        };
    });




5. 设置客户端文件为了接收示例应用程序中从 BLU Acceleration 和 DB2 检索到的数据,我们使用了下面的代码向服务器发送一个 POST                                请求,开始模拟(使用 jQuery):
1
$.post('/', {JSON}, function(data){ //do something });




公交车模拟器发送了一个 JSON 对象,从数据库中检索信息。该对象包含一些键,比如 table                                        用于指定表名,columns 用于指定​​要在查询中选择的特定列,还有                                        extras,用于条件(JOIN 数据和 WHERE                                子句)。可以针对不同的模拟定制这种数据访问的一般方法。
在公交车模拟器版本上,在 public/js/database.js 文件的第 13 行,可以看到 $.post 在另一个                                        $.post 回调里面。该代码使页面先加载所有的数据库内容,然后才加载动画。
返回列表