使用Node.js和MongoDB通过Mongoshin和Express.js构建JSON REST API服务器
2016-12-05 16:31
911 查看
根据《JavaScript快速全栈开发》书籍和网络上的融合整理出,方便自己和大家以后学习交流哒,更加为了自己整理笔记--
将使用Mocha和Super Agent库写测试,然后使用测试驱动的方式用Express.js、MongoDBD Mongoshin库开发一个免费的Node.js JSON Rest API服务器。
1.先创建一个用于保存测试文件的文件夹。可以人工创建也可以代码创建。(我的路径D:\A_Learn\Node.js\anzhuangmulu\NodeTest\rest-api)
mkdir rest-api
cd rest-api
2.用cmd进入存放node.js的目录里安装Mocha、Exppect.js和Super Agent库。
npm install mocha
npm install expect.js
npm install supperagent
3.【测试覆盖率】使用Super Agent的链式调用函数。写一个完整的express.test.js测试覆盖率,放入刚才创建的rest-api里面(我的地址是D:\A_Learn\NodeJS\anzhuangmulu\NodeTest\rest-api)
(4)【依赖】将要使用Mongoskin,它是一个MongoDB库,比原生MongoDB驱动好用。Express.js是Node.js核心模块的包装器,它下Connect中间件的基础上构建而来,提供了大量的方便。
用cmd进入到node_modules目录中进行安装
npm install express
npm install -g mongoskin
npm install -g mogodb(因为还要用到mongo所以也要安装mongo哦.这个是全局安装mongodb否则会报找不到mongo的错误)
新建一个ecpress.js放入rest-api目录中
在另外一个窗口(不要关闭之前那个)运行mocha express.test.js
还可以在浏览器中查看比如http://localhost:3000/test
延伸:以前写成以下时会报下面的错误
var express = require('express'),mongoskin = require('mongoskin')
var app = express()
app.use(bodyParser())
这是因为express3和express4的区别:参考文献:http://www.expressjs.com.cn/guide/migrating-4.html#overview
所以改成了下面这样并且在node-moudle里面引入body-parser (npm install body-parser):var express = require('express'),mongoskin = require('mongoskin') var bodyParser = require('body-parser') var app = express()
运行了发现还报错误:body-parser deprecated bodyParser:use indiidual json/urlencoded middewares express.js:4:9
因此在里面加上
将使用Mocha和Super Agent库写测试,然后使用测试驱动的方式用Express.js、MongoDBD Mongoshin库开发一个免费的Node.js JSON Rest API服务器。
1.先创建一个用于保存测试文件的文件夹。可以人工创建也可以代码创建。(我的路径D:\A_Learn\Node.js\anzhuangmulu\NodeTest\rest-api)
mkdir rest-api
cd rest-api
2.用cmd进入存放node.js的目录里安装Mocha、Exppect.js和Super Agent库。
npm install mocha
npm install expect.js
npm install supperagent
3.【测试覆盖率】使用Super Agent的链式调用函数。写一个完整的express.test.js测试覆盖率,放入刚才创建的rest-api里面(我的地址是D:\A_Learn\NodeJS\anzhuangmulu\NodeTest\rest-api)
var superagent = require('superagent') var expect = require('expect.js') describe('express rest api server',function(){ var id it ('post object',function(done){ superagent.post('http://localhost:3000/collection/test') .send({name:'John',email:'john@rpjs.co'}) .end(function(e,res){ expect(e).to.eql(null) expect(res.body.length).to.eql(1) expect(res.body[0]._id.length).to.eql(24) id = res.body[0]._id done() }) }) it('retrieves an object',function(done){ superagent.get('http://localhost:3000/collections/test/'+id) .end(function(e,res){ expect(e).to.eql( 4000 null) expect(typeof res.body).to.eql('object') expect(res.body._id.length).to.eql(24) expect(res.body._id).to.eql(id) done() }) }) it('retrieves a collection',function(done){ superagent.get('http://localhost:3000/collections/test') .end(function(e,res){ expect(e).to.eql(null) expect(res.body.length).to.be.above(1) expect(res.body.map(function(item){ return item._id })).to.contain(id) done() }) }) it('updates an object',function(done){ superagent.get('http://localhost:3000/collections/test/'+id) .send({name:'Peter',email:'peter@yahoo.com'}) .end(function(e,res){ expect(e).to.eql(null) expect(typeof res.body).to.eql('object') expect(res.body.msg).to.eql('success') done() }) }) it('checks an uodated object',function(done){ superagent.get('http://localhost:3000/collections/test/'+id) .end(function(e,res){ expect(e).to.eql(null) expect(typeof res.body).to.eql('object') expect(res.body._id.length).to.eql(24) expect(res.body._id).to.eql(id) expect(res.body.name).to.eql('Peter') done() }) }) it('removes an object',function(done){ superagent.get('http://localhost:3000/collections/test/'+id) .end(function(e,res){ expect(e).to.eql(null) expect(typeof res.body).to.eql('object') expect(res.body.msg).to.eql('success') done() }) }) })最后cmd进入到D:\A_Learn\NodeJS\anzhuangmulu\NodeTest\rest-api后运行$mocha express.test.js命令,即可查看到6条信息。
(4)【依赖】将要使用Mongoskin,它是一个MongoDB库,比原生MongoDB驱动好用。Express.js是Node.js核心模块的包装器,它下Connect中间件的基础上构建而来,提供了大量的方便。
用cmd进入到node_modules目录中进行安装
npm install express
npm install -g mongoskin
npm install -g mogodb(因为还要用到mongo所以也要安装mongo哦.这个是全局安装mongodb否则会报找不到mongo的错误)
新建一个ecpress.js放入rest-api目录中
var express = require('express'),mongoskin = require('mongoskin') var bodyParser = require('body-parser') var app = express() app.use(bodyParser.urlencoded({extended:false})) app.use(bodyParser.json()) var db = mongoskin.db('localhost:27017/test',{safe:true}); app.param('collectionName',function(req,res,next,collectionName){ req.collection = db.collection(collectionName) return next() }) app.get('/',function(req,res){ res.send('please select a collection,'+'e.g.,/collections/messages') }) app.get('/collections/:collectionName',function(req,res){ req.collection.find({},{limit:10,sort:[['_id',-1]]}) .toArray(function(e,results){ if(e) return next(e) res.send(results) }) }) app.post('/collections/:collectionName',function(req,res){ req.collection.insert(req.body,{},function(e,results){ if(e) return next(e) res.send(results) }) }) app.get('/collections/:collectionName/:id',function(req,res){ req.collection.findOne({_id:req.collection.id(req.params.id)},function(e,result){ if(e) return next(e) res.send(result) }) }) app.put('/collections/:collectionName/:id',function(req,res){ req.collection.update({_id:req.collection.id(req.params.id)},{$set:req.body},{safe:true,multi:false},function(e,result){ if(e) return next(e) res.send((result===1) ? {msg:'success'} : {msg:'error'}) }) }) app.delete('/collections/:collectionName/:id',function(req,res){ req.collection.remove({_id:req.collection.id(req.params.id)},function(e,result){ if(e) return next(e) res.send((result === 1) ? {msg:'success'} : {msg:'error'}) }) }) app.listen(3000)在终端运行node express.js
在另外一个窗口(不要关闭之前那个)运行mocha express.test.js
还可以在浏览器中查看比如http://localhost:3000/test
延伸:以前写成以下时会报下面的错误
var express = require('express'),mongoskin = require('mongoskin')
var app = express()
app.use(bodyParser())
这是因为express3和express4的区别:参考文献:http://www.expressjs.com.cn/guide/migrating-4.html#overview
所以改成了下面这样并且在node-moudle里面引入body-parser (npm install body-parser):var express = require('express'),mongoskin = require('mongoskin') var bodyParser = require('body-parser') var app = express()
运行了发现还报错误:body-parser deprecated bodyParser:use indiidual json/urlencoded middewares express.js:4:9
因此在里面加上
var express = require('express'),mongoskin = require('mongoskin') var bodyParser = require('body-parser') var app = express()app.use(bodyParser.urlencoded({extended:false}))app.use(bodyParser.json())
相关文章推荐
- 第8章-使用Express.js和Hapi构建Node.js-REST-API服务-8.3.使用Express和Mongoskin实现REST API服务器
- 第8章-使用Express.js和Hapi构建Node.js-REST-API服务-8.4.重构:使用Hapi搭建REST API服务器
- 第8章-使用Express.js和Hapi构建Node.js-REST-API服务-8.2.项目依赖
- Node.js项目实战-构建可扩展的Web应用(第一版):8 使用Express.js和Hapi构建Node.js REST API服务
- 第8章-使用Express.js和Hapi构建Node.js-REST-API服务-8.5.小结
- 第8章-使用Express.js和Hapi构建Node.js-REST-API服务-8.1.REST(表述性状态传递)Representational State Transfer
- 使用 Node.js、Express、AngularJS 和 MongoDB 构建一个Web程序
- Node.js + Express 4.x + MongoDB 构建登录注册(二)
- Node.js + Express 4.x + MongoDB 构建登录注册(三)
- 用node.js搭建服务器,模拟返回json数据供客户端get,post请求使用
- Node.JS入门--通过构建一个上传文件的服务器来学习Node.JS
- 一个nodejs+mongodb搭建的博客,使用module: ejs, express, mongodb, underscore等,不错的入门文章
- 使用 Node.js 和 Express.js 搭建简易 HTTP/2 服务器
- 使用node.js ,Express, 和Mongodb 简历一个简单的Restful 网页服务-part1
- Node.js + Express 4.x + MongoDB 构建登录注册-简易用户管理(五)
- 从零开始搭建Node.js, Express, Ejs, Mongodb服务器
- 使用Node.js + Mongodb构建基于Cloud Foundry的项目
- 使用Node.js + Mongodb构建基于Cloud Foundry的项目
- Node.js+MongoDB+Express网站开发(一):使用Ping++SDK接入支付功能
- API 服务器搭建笔记:CentOS + Node.js + MongoDB