node.js �� CoffeeScript �������Ă݂� 1

�ȑO�uCoffeeScript �������Ă݂��v�Ƃ����l�^�������܂����� CoffeeScript �� node.js �Ŏg�����Ƃ��ł���̂� node.js �ɓ���Ď����Ă݂܂��B

�܂��̓O���[�o���C���X�g�[���B

$ sudo npm install -g coffee-script

CoffeeScript �̃\�[�X�������܂��B

$ vi test.coffee
alert "hello"

����Ȋ����B

CoffeeScript �� �S�R�킩��Ȃ��A���Đl�� ���̃T�C�g���Q�l�ɂȂ�Ǝv���܂��B

[�Q�l]
CoffeeScript���ĂȂ񂼁H

�R���p�C������� js �t�@�C�����ł��܂��B

$ coffee -c test.coffee

�ł��� js �t�@�C�������Ă݂܂��B

$ cat test.js
(function() {

  alert("hello");

}).call(this);

������ JavaScript �ɂȂ��Ă܂����B

node.js �� express ���g���Ă݂�

node.js �ɂ� express �Ƃ��� Web �t���[�����[�N������ ������g���ƊȒP�� Web �V�X�e���̐��`�����邻���Ȃ̂� �����Ă݂܂��B

���̃T�C�g���Q�l�ɐi�߂܂����B

[�Q�l]
Node.js�iExpress�j�A�v���̐��`�������������� - �A�C���V���^�C���̓d�b�ԍ�

express ���O���[�o���C���X�g�[���B
����� express �R�}���h���g����悤�ɂȂ�܂��B

$ sudo npm install -g express
$ express -v
2.5.8

"-g" �I�v�V�����ŃO���[�o���C���X�g�[���ł��B

��L�̃T�C�g�ł���Ă�悤�� hoge �Ƃ����A�v�����쐬���܂��B

$ express hoge
$ cd hoge
$ sudo npm link express
$ npm install jade

express �� jade ������Ă��܂��B
express �́A�O���[�o���C���X�g�[�����Ă���̂Ń����N�œ���܂��B ��������ƃV���{���b�N�����N���쐬����܂��B

����ł������`���ł��܂����B
���������������Ă݂܂��B

$ node app.js
Express server listening on port 3000 in development mode

�|�[�g 3000 �� Web �T�[�r�X���N�����܂��B

http://127.0.0.1:3000/

���̂悤�ȉ�ʂ��\������܂��B

WRITE_0556_01

�\�[�X���C�����ĕ\���� "Welcome to Hoge" �ɂ��܂��B

�\�[�X���C�����邽�т� ���� Web �T�[�r�X���N������͖̂ʓ|�Ȃ̂� �����I�Ƀ����[�h���Ă����R�}���h�����܂��B �������L�̎Q�l�T�C�g�̒ʂ�ł��B

node-dev ���O���[�o���C���X�g�[�����܂��B

$ sudo npm install -g node-dev

node �R�}���h�̑���� node-dev �R�}���h�ŋN�����܂��B

$ node-dev app.js
Express server listening on port 3000 in development mode

Web �T�[�r�X���N��������Ԃ� �\�[�X���C�����܂��B

�o�[�W�����������Ă��邹���� ��L�̎Q�l�T�C�g�Ƃ͈Ⴄ�t�@�C���ł����B

$ vi routes/index.js
/*
 * GET home page.
 */

exports.index = function(req, res){
  res.render('index', { title: 'Express' }) // "Hoge" �ɕύX
};

Web �T�[�r�X���N�������R�}���h�̕�������� �\�[�X��ύX�������Ƃɂ���� ���X�^�[�g���Ă���悤�ł����B

$ node-dev app.js
Express server listening on port 3000 in development mode
[INFO] Restarting
Express server listening on port 3000 in development mode

�A�N�Z�X���Ă݂܂��B

http://127.0.0.1:3000/

WRITE_0556_02

�\�����e���ς��܂����B

�Ƃ肠���������܂ŁB�m���ɊȒP�ł��ˁB

node.js ���� MongoDB ���g���Ă݂�

node.js �� mongoose ���C���X�g�[�������̂� node.js ���� MongoDB �̒l���擾���Ă݂܂��B

���̃T�C�g���Q�l�ɐi�߂܂����B

[�Q�l]
mongoose���g����mongodb�ɃA�N�Z�X���Ă݂� - A Peak Never Ending !

�܂� MongoDB �Ƀf�[�^��o�^���܂��B

$ mongo
MongoDB shell version: 1.2.2
url: test
connecting to: test
type "exit" to exit
type "help" for help
> use memo
switched to db memo
> db.memos.save({title:'test title1', body:'test body1'})
> db.memos.save({title:'test title2', body:'test body2'})
> exit

�f�[�^�x�[�X�� memo�A�R���N�V������ memos �ɂ��܂��B

node.js �̃X�N���v�g memo.js �����܂��B
��L�̎Q�l�T�C�g�̃X�N���v�g�����̂܂ܓ\��t���܂��B

$ vi memo.js
/*
 * Mongoose�Ńf�[�^�����o���ĕ\������e�X�g
 */
var mongoose = require('mongoose');

// �X�L�[�}��`
var MemoSchema = new mongoose.Schema({
  title: String,
  body: String
});
// ���f���Ƃ��ēo�^
var Memo = mongoose.model('Memo', MemoSchema);

// mongodb�ɐڑ�
mongoose.connect('mongodb://localhost:27017/memo',
  // memo�̕����̓f�[�^�x�[�X��
  // �R�[���o�b�N�ŃG���[���̏�����������݂����B
  function(err) {
    if (err) {
      console.log(err);
    } else {
      console.log('connection success!');
    }
  }
);

// find���ăR���\�[���ɏo��
Memo.find({}, function(err, docs) {
  if(!err) {
    console.log("num of item => " + docs.length)
    for (var i = 0; i < docs.length; i++ ) {
      console.log(docs[i]);
    }
    mongoose.disconnect()  // mongodb�ւ̐ڑ���ؒf
    process.exit()         // node.js�I��
  } else {
    console.log("find error")
  }
});

���s���Ă݂܂��B

$ node memo.js
connection success!
num of item => 2
{ _id: 4f73edfbb7c76c517dc7eb16,
  title: 'test title1',
  body: 'test body1' }
{ _id: 4f73edffb7c76c517dc7eb17,
  title: 'test title2',
  body: 'test body2' }

node.js ���� MongoDB �̒l���擾�ł��܂����B
����ŁA�ł��邱�Ƃ̕����L����܂����B

Ubuntu10.04 �� mongoose ���C���X�g�[������

��ƃ����ł��B
�O��� node.js �̑����ł��B ����� mongoose �����܂��B

mongoose �� node.js ���� mongodb �� ORM ���ۂ��A�N�Z�X���邽�߂̃��C�u�����ł��B

mongoose �̃C���X�g�[���ɂ� npm ���g���܂��B npm �́A�O��� node.js �̃C���X�g�[���œ����Ă��܂��B

$ which npm
/usr/local/bin/npm

�v���L�V�F�؂��K�v�Ȋ‹����Ƃ�����Ƒ�ςł��B

�܂� npm �Ƀv���L�V�̐ݒ�����܂��B

$ npm config set proxy http://USER:PASSWORD@SERVER:PORT

�v���L�V���g���‹����� DNS �������Ȃ��Ă����v�������肵�܂��� npm �ł͉��̃T�C�g�ɏ����Ă���悤�ɖ��O�̉������ł����ăG���[�ɂȂ��Ă��܂��܂����B

[�Q�l]
Proxy�‹�����npm�C���X�g�[�� :�_���l�ԃI�����C��

DNS ��ݒ肷�邩 /etc/hosts �ɐڑ���� registry.npmjs.org ��lj������肵�đΉ����܂��B

mongoose �̃C���X�g�[���B

$ npm install mongoose

�E�E�E�Ǝv������A�܂�����G���[���o�܂��B

npm http GET https://registry.npmjs.org/mongoose

npm ERR! Error: connect ECONNREFUSED
npm ERR!     at errnoException (net.js:670:11)
npm ERR!     at Object.afterConnect [as oncomplete] (net.js:661:19)

���̃T�C�g�ɏ����Ă���悤�� https ���Ƃ��܂������܂���B

[�Q�l]
WindowsXP + �v���L�V�‹���npm���g�� - �l�p�v���O��

�z�[���f�B���N�g���� .npmrc ���ł��Ă���̂ŕҏW���܂��B

$ vi ~/.npmrc

�v���L�V�̐ݒ肪�����Ă���̂� ���̍s��lj����܂��B

registry = http://registry.npmjs.org/

���� 1 �x�C���X�g�[���B

$ npm install mongoose

���x�͐������܂����B

Ubuntu10.04 �� node.js ���C���X�g�[������

��ƃ����ł��B

�܂��A�\�[�X���_�E�����[�h�B

$ wget http://nodejs.org/dist/v0.6.14/node-v0.6.14.tar.gz

�𓀁B

$ tar xzvf node-v0.6.14.tar.gz
$ cd node-v0.6.14

configure �B

$ ./configure
Checking for program g++ or c++          : /usr/bin/g++
Checking for program cpp                 : /usr/bin/cpp
Checking for program ar                  : /usr/bin/ar
Checking for program ranlib              : /usr/bin/ranlib
Checking for g++                         : ok
Checking for program gcc or cc           : /usr/bin/gcc
Checking for gcc                         : ok
Checking for library dl                  : yes
Checking for openssl                     : yes
Checking for library util                : yes
Checking for library rt                  : yes
Checking for fdatasync(2) with c++       : yes

���̊‹��ł� �ŏ� ���̂悤�ɃG���[���o���̂� libssl-dev ���C���X�g�[�����܂����B

Checking for openssl                     : not found
Checking for function SSL_library_init   : not found
Checking for header openssl/crypto.h     : not found
/home/odin/node-v0.6.14/wscript:374: error: Could not autodetect 
OpenSSL support. Make sure OpenSSL development packages are ...
$ apt-get install libssl-dev 

make �� make install �B

$ make
$ sudo make install

node �R�}���h�����s���Ă݂܂��B

$ node
> 3 + 5
8
> var a = 3;
undefined
> console.log(a);
3
undefined

����ŏI���ł��B