在Node.js中构建正确的REST Web服务
2014-04-26 08:08
656 查看
原文:http://segmentfault.com/a/1190000000369308
今天决定学一个叫做restify的Node.js模块。restify模块使得在Node.js中写正确的REST API变得容易了很多,而且它还提供了即装即用的支持,如版本控制、错误处理、CORS和内容协商。它大量地借鉴了Express(故意地),因为这或多或少是事实上的API来写在node.js上写web应用程序,将数据存储在MongoDB中。
Restify需要NodeJS和NPM包管理器,这个可以是随node.js安装时默认的。如果已经安装了node.js和NPM,就可以用NPM系统来安装Harp了。
此应用程序使用MongoDB作数据存储。
在任何方便的目录中的文件系统上创建一个新的目录:
输入下面命令,安装restify模块:
使用MongoJS作为MongoDB的驱动程序,输入下面命令安装mongojs模块:
现在已经安装了restify和mongojs创建一个名为
把下面内容粘贴进app.js:
这是加载restify和mongojs模块,并给它们分配变量。
现在,创建一个使用restify API的新服务器:
createServer() 函数接受一个选择对象,将
运行程序:
然后会看见如下命令行:
restify模块有很多内置的插件,把下面内容复制并粘贴到
上述代码表示:
restify.bodyParser() 会在服务器上自动将请求数据转换为JavaScript对象。
restify.CORS() 配置应用程序中的CORS支持。
在添加路由之前,添加代码来连接到MyApp的MongoDB数据库:
现在,已经连接到本地MongoDB实例。接下来,需要得到使用数据库对象的工作集合。
现在,服务器和数据库已经准备了。仍然需要路由来定义API的行为,复制并粘贴以下代码到app.js文件中:
上述代码执行以下操作:
当用户发出一个GET请求到'/jobs',
当用户发出一个GET请求到'/ jobs/123',
当用户发出POST请求'/jobs',
当用户删除请求'/ jobs/123',
现在编写回调函数,复制并粘贴进app.js:
使用curl测试Web服务,输入下面命令创建一个“job”:
找到所有的“jobs”:
在应用程序部署到OpenShift之前,座以下几个设置:
注册一个OpenShift帐户,它是完全免费的,可以分配给每个用户1.5 GB的内存和3 GB的磁盘空间。
安装RHC客户端工具,需要有ruby 1.8.7或更新的版本,如果已经有ruby gem,输入
通过
keys到OpenShift服务器。
设置完成后,输入以下命令创建一个新的OpenShift应用程序:
它会完成所有的工作,从创建一个应用程序、建立公共DNS、创建私有的git仓库到最后使用代码从Github资源库部署应用程序。该应用程序可以在这里访问 http:// day27demo-{domain-name}.rhcloud.com//
今天就这些,欢迎反馈。
原文 Day 27: Restify--Build Correct REST
Web Services in Node.js
今天决定学一个叫做restify的Node.js模块。restify模块使得在Node.js中写正确的REST API变得容易了很多,而且它还提供了即装即用的支持,如版本控制、错误处理、CORS和内容协商。它大量地借鉴了Express(故意地),因为这或多或少是事实上的API来写在node.js上写web应用程序,将数据存储在MongoDB中。
Restify准备
Restify需要NodeJS和NPM包管理器,这个可以是随node.js安装时默认的。如果已经安装了node.js和NPM,就可以用NPM系统来安装Harp了。此应用程序使用MongoDB作数据存储。
Restify安装
在任何方便的目录中的文件系统上创建一个新的目录:$ mkdir myapp $ cd myapp
输入下面命令,安装restify模块:
$ npm install restify
使用MongoJS作为MongoDB的驱动程序,输入下面命令安装mongojs模块:
$ npm install mongojs
编写基于REST的API
现在已经安装了restify和mongojs创建一个名为app.js的新文件:
$ touch app.js
把下面内容粘贴进app.js:
var restify = require('restify'); var mongojs = require("mongojs");
这是加载restify和mongojs模块,并给它们分配变量。
现在,创建一个使用restify API的新服务器:
var restify = require('restify'); var mongojs = require("mongojs");
var ip_addr = '127.0.0.1';
var port = '8080';
var server = restify.createServer({
name : "myapp"
});
server.listen(port ,ip_addr, function(){
console.log('%s listening at %s ', server.name , server.url);
});
createServer() 函数接受一个选择对象,将
myapp作为选择对象的服务器的名称传递给它,也可以在这份文档中查看选项的完整的选项列表。创建服务器实例之后,通过端口、ip地址和一个回调函数调用listen函数。
运行程序:
$ node app.js
然后会看见如下命令行:
myapp listening at http://127.0.0.1:8080
配置插件
restify模块有很多内置的插件,把下面内容复制并粘贴到app.js,应该加在
server.listen()函数前面。请参阅这份文档以了解所有被支持的插件。
server.use(restify.queryParser()); server.use(restify.bodyParser()); server.use(restify.CORS());
上述代码表示:
restify.queryParser()插件是用来解析HTTP查询字符串(如
/jobs?skills=java,mysql),解析后的内容将会在
req.query里可用。
restify.bodyParser() 会在服务器上自动将请求数据转换为JavaScript对象。
restify.CORS() 配置应用程序中的CORS支持。
MongoDB的配置
在添加路由之前,添加代码来连接到MyApp的MongoDB数据库:var connection_string = '127.0.0.1:27017/myapp'; var db = mongojs(connection_string, ['myapp']); var jobs = db.collection("jobs");
现在,已经连接到本地MongoDB实例。接下来,需要得到使用数据库对象的工作集合。
写CRUD API
现在,服务器和数据库已经准备了。仍然需要路由来定义API的行为,复制并粘贴以下代码到app.js文件中:var PATH = '/jobs' server.get({path : PATH , version : '0.0.1'} , findAllJobs); server.get({path : PATH +'/:jobId' , version : '0.0.1'} , findJob); server.post({path : PATH , version: '0.0.1'} ,postNewJob); server.del({path : PATH +'/:jobId' , version: '0.0.1'} ,deleteJob);
上述代码执行以下操作:
当用户发出一个GET请求到'/jobs',
findAllJobs回调函数将被调用。
当用户发出一个GET请求到'/ jobs/123',
findJob回调函数将被调用。
当用户发出POST请求'/jobs',
postNewJob回调函数将被调用。
当用户删除请求'/ jobs/123',
deleteJob回调会被调用(此处原文有误)。
现在编写回调函数,复制并粘贴进app.js:
function findAllJobs(req, res , next){ res.setHeader('Access-Control-Allow-Origin','*'); jobs.find().limit(20).sort({postedOn : -1} , function(err , success){ console.log('Response success '+success); console.log('Response error '+err); if(success){ res.send(200 , success); return next(); }else{ return next(err); } }); } function findJob(req, res , next){ res.setHeader('Access-Control-Allow-Origin','*'); jobs.findOne({_id:mongojs.ObjectId(req.params.jobId)} , function(err , success){ console.log('Response success '+success); console.log('Response error '+err); if(success){ res.send(200 , success); return next(); } return next(err); }) } function postNewJob(req , res , next){ var job = {}; job.title = req.params.title; job.description = req.params.description; job.location = req.params.location; job.postedOn = new Date(); res.setHeader('Access-Control-Allow-Origin','*'); jobs.save(job , function(err , success){ console.log('Response success '+success); console.log('Response error '+err); if(success){ res.send(201 , job); return next(); }else{ return next(err); } }); } function deleteJob(req , res , next){ res.setHeader('Access-Control-Allow-Origin','*'); jobs.remove({_id:mongojs.ObjectId(req.params.jobId)} , function(err , success){ console.log('Response success '+success); console.log('Response error '+err); if(success){ res.send(204); return next(); } else{ return next(err); } }) }
使用curl测试Web服务,输入下面命令创建一个“job”:
$ curl -i -X POST -H "Content-Type: application/json" -d '{"title":"NodeJS Developer Required" , "description":"NodeJS Developer Required" , "location":"Sector 30, Gurgaon, India"}' http://127.0.0.1:8080/jobs
找到所有的“jobs”:
$ curl -is http://127.0.0.1:8080/jobs HTTP/1.1 200 OK Access-Control-Allow-Origin: * Content-Type: application/json Content-Length: 187 Date: Sun, 24 Nov 2013 16:17:27 GMT Connection: keep-alive [{"title":"NodeJS Developer Required","description":"NodeJS Developer Required","location":"Sector 30, Gurgaon, India","postedOn":"2013-11-24T16:16:16.688Z","_id":"52922650aab6107320000001"}]
部署到云端
在应用程序部署到OpenShift之前,座以下几个设置:注册一个OpenShift帐户,它是完全免费的,可以分配给每个用户1.5 GB的内存和3 GB的磁盘空间。
安装RHC客户端工具,需要有ruby 1.8.7或更新的版本,如果已经有ruby gem,输入
sudo gem install rhc,确保它是最新版本。要更新RHC的话,执行命令
sudo gem update rhc,如需其他协助安装RHC命令行工具,请参阅该页面: https://www.openshift.com/developers/rhc-client-tools-install
通过
rhc setup命令设置您的OpenShift帐户,此命令将帮助你创建一个命名空间,并上传你的SSH
keys到OpenShift服务器。
设置完成后,输入以下命令创建一个新的OpenShift应用程序:
$ rhc create-app day27demo nodejs-0.10 mongodb-2 --from-code https://github.com/shekhargulati/day27-restify-openshift-demo.git
它会完成所有的工作,从创建一个应用程序、建立公共DNS、创建私有的git仓库到最后使用代码从Github资源库部署应用程序。该应用程序可以在这里访问 http:// day27demo-{domain-name}.rhcloud.com//
今天就这些,欢迎反馈。
原文 Day 27: Restify--Build Correct REST
Web Services in Node.js
相关文章推荐
- Day 27: Restify —— 在Node.js中构建正确的REST Web服务
- Restify —— 在Node.js中构建正确的REST Web服务
- [译] 第二十七天:Restify - 用Node.js创建正确的REST Web服务
- 第8章-使用Express.js和Hapi构建Node.js-REST-API服务-8.1.REST(表述性状态传递)Representational State Transfer
- Node.js项目实战-构建可扩展的Web应用(第一版):8 使用Express.js和Hapi构建Node.js REST API服务
- 第8章-使用Express.js和Hapi构建Node.js-REST-API服务-8.2.项目依赖
- 第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.5.小结
- Spring boot构建基于rest的Web服务
- NodeJs+http+fs+request+cheerio 采集,保存数据,并在网页上展示(构建web服务器)
- Node.js构建HTTPS+服务集群
- 为一个 iOS 应用编写一个简单的 Node.js/MongoDB Web 服务
- Node.js 静态web服务
- 为一个 iOS 应用编写一个简单的 Node.js/MongoDB Web 服务
- Node.js开发Web后台服务
- 使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务(包括使用 RestTemplate 与 REST 服务进行通信)
- node.js连接mongoDB数据库 快速搭建自己的web服务
- 使用Node.js和MongoDB通过Mongoshin和Express.js构建JSON REST API服务器
- 使用 Node.js、Express、AngularJS 和 MongoDB 构建一个Web程序