- Day 1: Bower - 管理你的客户端依赖关系
- Day 2: AngularJS - 对 AngularJS 的初步认识
- Day 3: Flask - 使用 Python 和 OpenShift 进行即时 Web 开发
- Day 4:PredictionIO - 如何创建一个博客推荐器
- Day 5: GruntJS - 重复乏味的工作总会有人做(反正我不做)
- Day 6:在 Java 虚拟机上使用 Grails 进行快速 Web 开发
- Day 7: GruntJS 在线重载 提升生产率至新境界
- Day 8: Harp.JS - 现代静态 web 服务器
- Day 9: TextBlob - 对文本进行情感分析
- Day 10: PhoneGap - 开发手机应用如此简单
- Day 11: AeroGear 推送服务器:使应用的通知推送变得简单
- Day 12: OpenCV - Java 开发者的人脸检测
- Day 13: Dropwizard - 非常棒的 Java REST 服务器栈
- Day14:使用斯坦福 NER 软件包实现你自己的命名实体识别器(Named Entity Recognition,NER)
- Day 15:Meteor - 从零开始创建一个 Web 应用
- Day 16: Goose Extractor - 好用的文章提取工具
- Day 17: 使用 JBoss Forge 和 OpenShift 构建部署 JAVA EE 6 应用
- Day 18: BoilerPipe - Java 开发者的文章提取工具
- Day 19: EmberJS 入门指南
- Day 20: 斯坦福 CoreNLP - 用 Java 给 Twitter 进行情感分析
- Day 21:Docker 入门教程
- Day 22: 使用 Spring、MongoDB 和 AngularJS 开发单页面应用
- Day 23:使用 TimelineJS 构建精美的时间轴
- Day 24: 使用 Yeoman 自动构建 Ember 项目
- Day 25: 联合 Tornado、MongoDB 和 AngularJS 进行应用开发
- Day 26: TogetherJS - 让我们一起来编程!
- Day 27: Restify - 在 Node.js 中构建正确的 REST Web 服务
- Day 28: OpenShift 的 Eclipse 集成
- Day 29:编写你的第一个 Google Chrome 扩展程序
- Day 30: Play Framework - Java 开发者的梦想框架
Day 27: Restify - 在 Node.js 中构建正确的 REST Web 服务
今天决定学一个叫做 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//
今天就这些,欢迎反馈。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论