日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Day 27: Restify —— 在Node.js中构建正确的REST Web服务

發(fā)布時間:2025/3/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Day 27: Restify —— 在Node.js中构建正确的REST Web服务 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

今天決定學(xué)一個叫做restify的Node.js模塊。restify模塊使得在Node.js中寫正確的REST API變得容易了很多,而且它還提供了即裝即用的支持,如版本控制、錯誤處理、CORS和內(nèi)容協(xié)商。它大量地借鑒了Express(故意地),因為這或多或少是事實上的API來寫在node.js上寫web應(yīng)用程序,將數(shù)據(jù)存儲在MongoDB中。

Restify準(zhǔn)備

Restify需要NodeJS和NPM包管理器,這個可以是隨node.js安裝時默認(rèn)的。如果已經(jīng)安裝了node.js和NPM,就可以用NPM系統(tǒng)來安裝Harp了。

此應(yīng)用程序使用MongoDB作數(shù)據(jù)存儲。

Restify安裝

在任何方便的目錄中的文件系統(tǒng)上創(chuàng)建一個新的目錄:

$ mkdir myapp $ cd myapp

輸入下面命令,安裝restify模塊:

$ npm install restify

使用MongoJS作為MongoDB的驅(qū)動程序,輸入下面命令安裝mongojs模塊:

$ npm install mongojs

編寫基于REST的API

現(xiàn)在已經(jīng)安裝了restify和mongojs創(chuàng)建一個名為app.js的新文件:

$ touch app.js

把下面內(nèi)容粘貼進(jìn)app.js:

var restify = require('restify'); var mongojs = require("mongojs");

這是加載restify和mongojs模塊,并給它們分配變量。

現(xiàn)在,創(chuàng)建一個使用restify API的新服務(wù)器:

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() 函數(shù)接受一個選擇對象,將myapp作為選擇對象的服務(wù)器的名稱傳遞給它,也可以在這份文檔中查看選項的完整的選項列表。創(chuàng)建服務(wù)器實例之后,通過端口、ip地址和一個回調(diào)函數(shù)調(diào)用listen函數(shù)。

運行程序:

$ node app.js

然后會看見如下命令行:

myapp listening at http://127.0.0.1:8080

配置插件

restify模塊有很多內(nèi)置的插件,把下面內(nèi)容復(fù)制并粘貼到app.js,應(yīng)該加在server.listen() 函數(shù)前面。請參閱這份文檔以了解所有被支持的插件。

server.use(restify.queryParser()); server.use(restify.bodyParser()); server.use(restify.CORS());

上述代碼表示:

  • restify.queryParser() 插件是用來解析HTTP查詢字符串(如 /jobs?skills=java,mysql),解析后的內(nèi)容將會在req.query里可用。
  • restify.bodyParser() 會在服務(wù)器上自動將請求數(shù)據(jù)轉(zhuǎn)換為JavaScript對象。
  • restify.CORS() 配置應(yīng)用程序中的CORS支持。
  • MongoDB的配置

    在添加路由之前,添加代碼來連接到MyApp的MongoDB數(shù)據(jù)庫:

    var connection_string = '127.0.0.1:27017/myapp'; var db = mongojs(connection_string, ['myapp']); var jobs = db.collection("jobs");

    現(xiàn)在,已經(jīng)連接到本地MongoDB實例。接下來,需要得到使用數(shù)據(jù)庫對象的工作集合。

    寫CRUD API

    現(xiàn)在,服務(wù)器和數(shù)據(jù)庫已經(jīng)準(zhǔn)備了。仍然需要路由來定義API的行為,復(fù)制并粘貼以下代碼到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);

    上述代碼執(zhí)行以下操作:

  • 當(dāng)用戶發(fā)出一個GET請求到'/jobs',findAllJobs回調(diào)函數(shù)將被調(diào)用。
  • 當(dāng)用戶發(fā)出一個GET請求到'/ jobs/123',findJob回調(diào)函數(shù)將被調(diào)用。
  • 當(dāng)用戶發(fā)出POST請求'/jobs',postNewJob回調(diào)函數(shù)將被調(diào)用。
  • 當(dāng)用戶刪除請求'/ jobs/123',deleteJob回調(diào)會被調(diào)用(此處原文有誤)。
  • 現(xiàn)在編寫回調(diào)函數(shù),復(fù)制并粘貼進(jìn)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服務(wù),輸入下面命令創(chuàng)建一個“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"}]

    部署到云端

    在應(yīng)用程序部署到OpenShift之前,座以下幾個設(shè)置:

  • 注冊一個OpenShift帳戶,它是完全免費的,可以分配給每個用戶1.5 GB的內(nèi)存和3 GB的磁盤空間。
  • 安裝RHC客戶端工具,需要有ruby 1.8.7或更新的版本,如果已經(jīng)有ruby gem,輸入 sudo gem install rhc ,確保它是最新版本。要更新RHC的話,執(zhí)行命令 sudo gem update rhc,如需其他協(xié)助安裝RHC命令行工具,請參閱該頁面: https://www.openshift.com/developers/rhc-client-tools-install
  • 通過 rhc setup 命令設(shè)置您的OpenShift帳戶,此命令將幫助你創(chuàng)建一個命名空間,并上傳你的SSH keys到OpenShift服務(wù)器。
  • 設(shè)置完成后,輸入以下命令創(chuàng)建一個新的OpenShift應(yīng)用程序:

    $ rhc create-app day27demo nodejs-0.10 mongodb-2 --from-code https://github.com/shekhargulati/day27-restify-openshift-demo.git

    它會完成所有的工作,從創(chuàng)建一個應(yīng)用程序、建立公共DNS、創(chuàng)建私有的git倉庫到最后使用代碼從Github資源庫部署應(yīng)用程序。該應(yīng)用程序可以在這里訪問 http:// day27demo-{domain-name}.rhcloud.com//

    今天就這些,歡迎反饋。


    原文 Day 27: Restify--Build Correct REST Web Services in Node.js
    翻譯整理 SegmentFault

    《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的Day 27: Restify —— 在Node.js中构建正确的REST Web服务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。