やりたいこと
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.