restify是用於編寫RESTful API的Node.js的模塊。mongodb
下面介紹如何使用restify和mongodb編寫一個面向geek的招聘平臺,使用RESTful API發佈和查看用工需求。數據庫
restify = require 'restify' mongojs = require mongojs ip_addr = '127.0.0.1' port = '3000' server = restify.createServer(name : "geekjob") server.listen(port ,ip_addr, -> console.log('%s listening at %s ', server.name , server.url))
運行:npm
coffee geek-job.coffee
很好,雖然什麼也沒幹,可是已經能跑了!json
restify模塊有不少內置插件,不用白不用。app
server.use restify.queryParser() server.use restify.bodyParser() server.use restify.CORS()
restify.queryParser()
插件用於解析HTTP請求結果存在req.query
。框架
restify.bodyParser()
將請求數據轉化成CoffeeScript對象。curl
restify.CORS()
添加CORS支持。函數
鏈接MongoDB數據庫post
connection_string = '127.0.0.1:27017/geekjob'; db = mongojs(connection_string, ['geekjob']); jobs = db.collection("jobs")
準備工做完成了。開始幹正事,定義CRUD。測試
PATH = '/jobs' server.get({path : PATH, version : '0.0.1'} , list_all_jobs) server.get({path : PATH +'/:jobId', version : '0.0.1'} , show_job) server.post({path : PATH , version: '0.0.1'}, add_new_job) server.del({path : PATH +'/:jobId', version: '0.0.1'} , remove_job)
框架已經有了,往裏填回調函數:
list_all_jobs = (req, res , next) -> res.setHeader('Access-Control-Allow-Origin','*') jobs.find().limit(20).sort({postedOn : -1} , (err , success) -> console.log('Response success '+success) console.log('Response error '+err) res.send(200 , success) next() else next(err) ) show_job = (req, res , next) -> res.setHeader('Access-Control-Allow-Origin','*') jobs.findOne({_id:mongojs.ObjectId(req.params.jobId)} , (err , success) -> console.log('Response success '+success) console.log('Response error '+err) if success res.send(200 , success) next() else next(err) ) add_new_job (req , res , next) -> 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 , (err , success) -> console.log('Response success '+success) console.log('Response error '+err) if success res.send(201 , job) next() else next(err) ) remove_job = (req , res , next) -> res.setHeader('Access-Control-Allow-Origin','*') jobs.remove({_id:mongojs.ObjectId(req.params.jobId)} , (err , success) -> console.log('Response success '+success) console.log('Response error '+err) if success res.send(204) next() else next(err) )
O.K. 搞定了。快吧?
用curl
測試下:
curl -i -X POST -H 'Content-Type: application/json' -d '{"title":"CoffeeScript Developer Required" , "description":"NodeJS Developer Required" , "location":"A.T. Field"}' http://127.0.0.1:3000/jobs curl -is http://127.0.0.1:3000/jobs