今天的30天挑戰,我決定學習Node.js模塊Restify, restify使得用Node.js寫正確的RESTful API很方便,提供即裝即用的功能支持,如版本,錯誤處理,CORS和內容協議,它特地借鑑大量的Express,由於或多或少實際Web程序API是基於node.js. 本文咱們來開發一個RESTful API存儲做業,咱們保存數據到MongoDB. html
Restify須要NodeJS和node.js安裝時自帶的NPM包管理器,你能夠從官網下載最新的NodeJS,下載和安裝後,咱們用NPM安裝Harp. java
程序會用MongoDB作數據存儲,請下載最新MongoDB. node
在你機器上新建目錄。mysql
$ mkdir myapp
$ cd myapp
輸入如下命令安裝restify模塊。git
$ npm install restify
咱們用MongoJS做MongoDB驅動,輸入如下命令安裝mongojs模塊。github
$ npm install mongojs
安裝完restify和mongojs後,開始寫代碼,新建一個app.js的文件。web
$ touch app.js
複製粘貼如下內容到app.js.sql
var restify = require('restify'); var mongojs = require("mongojs");
以上兩行用須要的功能下載了restify和mongojs模塊並指定參數。 mongodb
如今,用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做爲服務名,你能夠從文檔裏查看完整選擇列表。建立好服務實例後,咱們調用listen功能傳遞端口,IP和回調功能。
輸入如下命令運行程序。
$ 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());
以上三行:
在加路由前,先把添加鏈接到到myapp MongoDB數據庫的代碼。
var connection_string = '127.0.0.1:27017/myapp'; var db = mongojs(connection_string, ['myapp']); var jobs = db.collection("jobs");
以上代碼,咱們鏈接了本地MongoDB實例,接下來,用數據庫對象獲取做業收集。
如今,咱們已經有了服務器和數據庫部分,還須要路由來定義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);
以上代碼:
如今來寫回調,複製粘貼如下代碼到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); } }) }
以上代碼不言而喻,咱們用Mongojs API執行CRUD操做。
咱們能夠用curl測試web services, 要新建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程序。
$ 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//
這是今天的內容,繼續給反饋吧。
原文:https://www.openshift.com/blogs/day-27-restify-build-correct-rest-web-services-in-nodejs