xml地图|网站地图|网站标签 [设为首页] [加入收藏]

美高梅游戏网站

当前位置:美高梅游戏网站 > 美高梅游戏网站 > Node.js + MongoDB 后端学习笔记

Node.js + MongoDB 后端学习笔记

来源:http://www.gd-chuangmei.com 作者:美高梅游戏网站 时间:2019-09-03 22:14

Node.js是近两年备受企业开发者关注技术,目前它在github的访问量已超过Rails,甚至一度引发了Node.js是否会替代Rails的讨论。去年底Node.jsS创始人Ryan Dalh加盟Joyent获得企业资助,今年6月份微软和Joynet达成合作协议,将Node移植到了Windows平台上,用户可以更方便的在Windows平台上开发Node应用。包括LinkedIn、Yammer、GitHub、淘宝等企业开发者也在实际应用中采用了Node相关技术,并给予了肯定。

学习后端有两个礼拜了。当然,实际学习时间不过三四天,但感觉入门木有问题了,起码我的目标:为前端提供数据支持已经没有问题了。其他复杂的逻辑和数据处理就等需要的时候边学边做吧。
在这里主要总结和探讨下后端知识以及如何更快的掌握一门新技术。

图片 1 

Node.js学习

学习目标:为前端提供 RESTful API 接口。

Node方面,我快速浏览一遍基础教程,对很多知识点都是了解即可。主要是关注在写 RESTful 接口这一块的知识点:

  • 全局对象 —— 了解node中经常出现的全局对象是必要的。
  • 常用模块 —— 对出现频率搞得模块要熟悉的,如 fs、http、util 等
  • GET、POST 请求和 RESTful API —— 这是我的主要学习目标,认真看完并且照着示例代码实现一遍。
  • Express 框架 —— 已知的比较适合新手学习的node框架,熟悉基本用法,照着实现一遍。
  • 连接 MongoDB —— 学习如何连接MongoDB,这个在学习了MongoDB基本知识后重点学习。

因为暂时只为了提供接口,所以只要对Node有个大致的了解。然后重点关注写接口、数据库和框架。当我看完一遍资料,并将重点的知识点实际操作实现一遍之后,我对 node 就有了大致了解了~达到了给我一个 Node 后端项目我能看懂大部分代码逻辑的程度。之后看一下 Express 框架~

淘宝数据产品部资深Web开发工程师袁锋

Express

学习目标: 使用 Express 快速搭建 Node 后端项目,配合之前学到的 Node 基础知识为前端提供 API 接口支持

这里把 Express 的官方文档和API看了一遍,发现呢其实 Express 的东西不多,在看过node基本知识后还是很好理解的。
我就用了 Express 提供的应用生成器生成一个 Express 项目。项目很简单,主要是修改 app.jsroutes 文件夹里面的东西,写法与Node教程里的差不多。在终端执行 $ npm start 命令即可进行调试。
一开始我还没学习MongoDB的时候我是用的JSON文件来存取数据的下面是我写的一段代码

var express = require('express');
var fs = require('fs')
var router = express.Router();

router.get('/', function (req, res, next) {
    res.send('Hello World');
});

// 获取所有数据
router.get('/getlist', function (req, res, next) {
    fs.readFile(__dirname + '/data/plan.json', 'utf8', function (err, data) {
        if (err) {
            res.send(err)
        } else {
            res.send(data)
        }
    })
})

router.get('/test', function (req, res, next) {
    fs.readFile(__dirname + '/data/plan.json', 'utf8', function (err, data) {
        var name = req.query.name
        var hasVal = false
        if (name == undefined) {
            res.send('need name')
        } else if (err) {
            res.send(err)
        } else {
            var obj = JSON.parse(data)
            for (var key in obj) {
                if (obj[key].name == name) {
                    hasVal = obj[key]
                }
            }
            if (hasVal) {
                res.send(JSON.stringify(hasVal))
            } else {
                res.send('name no found')
            }
        }
    })
})

module.exports = router;

通过 node 的文件模块来获取 plan.json 文件,这样就实现了使用 Express 框架写 GET 接口的目标。访问 http://localhost:8082/file/getlist 获取如下结果:

[
  { "Date": "2017-6-11", "Time": "10:22", "Detail": "洗澡", "Describe": "宝宝洗干净" }, 
  { "Date": "2017-6-13", "Time": "10:22", "Detail": "开饭", "Describe": "宝宝要吃饭" }
 ]

调试过程建议使用Postman,调试各类接口都特别方便。

在今年4月的QCon北京大会上,来自淘宝的技术专家廖凯做了有关Node内容的演讲,在国内技术社区中引起了广泛的关注。在正在进行的QCon杭州大会上,同样是来自淘宝网的数据产品部资深Web开发工程师袁锋的一场关于《Nodejs, 脱离了浏览器的Javascript》的演讲同样受到了大量开发者的关注。

数据库

学习目标:了解 MongoDB 基本知识,重点掌握数据的增删改查和 MongoDB 与 Node.js 的连接

接下来转战数据库,这里选择了 MongoDB 。在明确了学习目标之后,重点学习增删改查和数据库连接,其他的以了解为主。就在这样的目标之下,重点学习以下知识:

  • 安装、创建数据库以及数据库的一些常用操作。
  • 找到一个好的数据库 GUI —— 发现了 Robomongo,感觉挺好用的。
  • 创建、删除数据库。
  • 插入、更新、查询、删除文档 —— 这当然是重中之重,所有示例逐个实现一遍
  • 除此之外,想数据处理、比较、数据数量限制limit、排序sort等了解即可,需要的时候查阅一下就可以解决问题。

配合Node里面的 Node.js MongoDB 章节,动手实践连接后端与数据库了。照着教程来连接成功应该不难。成功在 Express 项目中获取到数据库数据就说明连接成功了。现在就可以开始你的表演了!
除了GET和POST,另外两个请求的写法差不多,DELETE类似GET方法,而PUT类似POST方法。
哦,对了,数据库和node的连接所用的中间件有mongodb、mongoose等,我简单粗暴,用的最基本的MongoDB来写的。下面是我写的第一个后端接口代码:

袁锋在演讲中介绍的Node.js的一些应用原理和技术模块,并介绍了基于Node.js的网络应用案例,其中包括微博,团队协作工具、可协作的绘图聊天室等。袁锋表示,Node.js最终的目的是,提供一种便捷的方式构建网络程序。他透露,Node.js官方收集的第三方模块现在共有1152个。

plan.js

var DBUtils = require('./DBUtils')
var express = require('express');
var fs = require('fs')
var router = express.Router();
var bodyParser = require('body-parser')
var ObjectID = require('mongodb').ObjectID

// 创建 application/x-www-form-urlencoded 编码解析
var urlencodedParser = bodyParser.urlencoded({ extended: false })

router.get('/', function (req, res, next) {
    res.send('Hello MongoDB');
});

router.get('/findAllPlan', function (req, res, next) {
    DBUtils.getDB(function (db) {
        var collection = db.collection('plan')
        collection.find().toArray(function (err, result) {
            if (err) {
                console.log('Err:' + err)
                return
            }
            console.log(result)
            res.send(result)
            db.close()
        })
    })
});

router.get('/findPlanByDate', function (req, res, next) {
    DBUtils.getDB(function (db) {
        var collection = db.collection('plan')
        var Date = req.query.Date
        console.log(Date)
        var whereStr = { 'Date': Date }
        collection.find(whereStr).toArray(function (err, result) {
            if (err) {
                console.log('Err:' + err)
                return
            }
            console.log(result)
            res.send(result)
            db.close()
        })
    })
})

router.get('/findPlanById', function (req, res, next) {
    DBUtils.getDB(function (db) {
        var collection = db.collection('plan')
        var whereStr = { '_id': ObjectID(req.query._id) }
        collection.find(whereStr).toArray(function (err, result) {
            if (err) {
                console.log('Err:' + err)
                return
            }
            console.log(result)
            if (result.length > 0) {
                res.send(result[0])
            } else {
                res.send({ 'msg': '未找到相应数据' })
            }
            db.close()
        })
    })
})

router.post('/', urlencodedParser, function (req, res, next) {
    DBUtils.getDB(function (db) {
        var collection = db.collection('plan')
        console.log(req.body)
        var response = {
            'Date': req.body.Date,
            'Time': req.body.Time,
            'Title': req.body.Title,
            'Describe': req.body.Describe
        }
        collection.insert(response, function (err, result) {
            if (err) {
                console.log('Error:' + err)
                return
            }
            res.send({ 'msg': '添加成功' })
        })
    })
})

router.put('/', urlencodedParser, function (req, res, next) {
    DBUtils.getDB(function (db) {
        var collection = db.collection('plan')
        var whereStr = {
            '_id': ObjectID(req.body._id),
        }
        var response = {
            'Date': req.body.Date,
            'Time': req.body.Time,
            'Title': req.body.Title,
            'Describe': req.body.Describe
        }
        collection.update(whereStr, { $set: response }, function (err, result) {
            if (err) {
                console.log('Error:' + err)
                return
            }
            res.send({ 'msg': '更新成功' })
        })
    })
})

router.delete('/', function (req, res, next) {
    DBUtils.getDB(function (db) {
        var collection = db.collection('plan')
        var Id = req.query.Id
        var whereStr = { '_id': ObjectID(Id) }
        collection.remove(whereStr, function (err, result) {
            if (err) {
                console.log('Error:' + err)
                return
            }
            res.send({ 'msg': '删除成功' })
        })
    })
})

module.exports = router

会后,BKJIA记者针对读者关注的几个问题与袁锋进行了短暂交流。袁锋表示,自己从2010年10月开始关注Node.js,他认为这是一项非常有前景的技术,目前正处于发展期。当然,Node.js还有一些不成熟的地方,比如一些耗CPU的应用以及文本处理,现在还不太好,但是网络应用程序基本上都能实现。Node.js目前在国外非常火,在国内,Node.js的技术推广集中在CNode社区。

DBUtils.js

var MongoClient = require('mongodb').MongoClient
var DB_COUN_STR = 'mongodb://localhost:8081/etdb'// 数据库地址

module.exports = {
    getDB: function (callback) {
        MongoClient.connect(DB_COUN_STR, function (err, db) {
            callback(db)
        })
    }
}

本文由美高梅游戏网站发布于美高梅游戏网站,转载请注明出处:Node.js + MongoDB 后端学习笔记

关键词:

上一篇:jQuery 1.6.4正式版发布 附下载

下一篇:没有了