ズッキーニのプログラミング実験場

プログラミング + アカデミック + 何か面白いこと。 記載されているものは基本的に私が所属する団体とは関係がありません。

   Jul 28

[node.js][express][coffeescript] RESTful API part1

by zuqqhi2 at 2013年7月28日
Pocket

やりたいこと

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.

Related Posts

  • <!--:ja-->[node.js][express]CPUとヒープのスナップショットを撮る<!--:--><!--:en-->[node.js][exprees]How to take snapshot of CPU and Heap<!--:-->2014年8月31日 [node.js][express]CPUとヒープのスナップショットを撮る 概要 node.jsでアプリを作成しているとメモリリーク(やCPUの負荷)に悩まされることが多い。 多くはスナップショットを撮ってボトルネックを見つけて改善することできたから、 ここではその方法を載せる。 スナップショットの結果はライブラリの関係上Chromeブラウザの […]
  • 2013年6月27日 [Javascript][Node.js][express]mongodbと連携させてみる mongodbを使って値の保存、読み出しを使ったプログラムを作成してみる。 まずは expressを使用してひな形を作成する。 次にmongodbとの接続に使用するモデルを作成する。 […]
  • 2013年8月14日 [express][socket.io]チャットデモのコードを見てみる 参考記事 ※この記事は、ただの上記のリンク先の記事を読んだメモです。 1.レシーバーの記述 サーバに対してlistenするから、app.jsの末尾のあたりに以下のように記述すれば良いみたい。 […]
  • 2013年8月4日 [node.js][express]RESTful API part2 やりたいこと mongoDBとつなげてGETパラメタやDBのデータ内容に応じて出力を変える。 ソース […]
  • 2013年6月15日 [Node.js][Nginx]Node.jsのインストールと起動 Node.jsのインストール Node.jsをインストールしてnginxをリバースプロキシとして動作させてみる。 まずはNode.jsをインストールしてみる。 「\[\[ -s $HOME/.pythonbrew/etc/bashrc […]
  • <!--:ja-->[CoffeeScript][Jasmine-node]環境構築<!--:--><!--:en-->[CoffeeScript][Jasmine-node]Setup<!--:-->2013年3月11日 [CoffeeScript][Jasmine-node]環境構築 Jasmine-node インストールメモ コマンドのみ Only Command
Pocket

You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.