やりたいこと
node.jsとexpressとcoffeescriptでRESTfulなAPIを作りたい。環境準備
[Install node.js] $ git clone git://github.com/creationix/nvm.git ~/.nvm $ vim ~/.bashrc source ~/.nvm/nvm.sh $ source ~/.bashrc $ nvm install v0.8.7 $ vim ~/.bashrc nvm use v0.8.7 $ source ~/.bashrc [Install express and coffeescript] $npm install express ejs coffee-script [Create Template] $express -e -t ejs restfulapi [Install mocha and chai for test] $npm install mocha chai
Coffee Scriptでモデルを書く
リクエストラインをValidateするモデルを作ってみる。class Requestline constructor: (params) -> @params = params @validator = "uid" : /^[0-9]+$/ getParams: -> return @params validate: -> for key, value of @params if key of @validator and @validator[key].test(value) == false return false return true exports.Requestline = Requestline
chai = require 'chai' expect = chai.expect chai.should() Requestline = require('../models/requestline').Requestline describe 'Requestline',-> describe 'getParams',-> before -> params = key1 : 'val1' key2 : 'val2' @requestline1 = new Requestline(params) it 'should return {key1:val1,key2:val2}', -> expected = 'key1':'val1' 'key2':'val2' @requestline1.getParams()['key1'].should.equal(expected['key1']) @requestline1.getParams()['key2'].should.equal(expected['key2']) describe 'validate',-> before -> params = uid : 2354 @requestline2 = new Requestline(params) it 'should return true', -> @requestline2.validate().should.be.true
コンパイルしてexpressとつなぎこみ
[Test] $mocha --compilers coffee:coffee-script spec/requestline_spec.coffee [Compile] $coffee -b -c models/requestline.coffee -o libs/requestline.js
/* * GET home page. */ var requestline = require('../libs/requestline'); exports.index = function(req, res){ var reqline = new requestline['Requestline'](req.query); console.log("Query Parameters"); console.log(reqline.getParams()); if (reqline.validate()) { res.json([{ author : 'Audrey Hepburn', text : "Nothing is impossible, the word itself says 'I'm possible'!"}]); } else { res.json({ error : { type : "Qeury Syntax Error", message : "Query Syntax Error"}}); } //res.render('index', { title: 'Express'}); };
あとは”node app.js”してみればOK.