ツナワタリマイライフ

日常ネタから技術ネタ、音楽ネタまで何でも書きます。

node.jsでhello,worldする

はじめに

少し前にこんな記事を書いた。

take-she12.hatenablog.com

これを受けて、何か新しい言語を、ちゃんとコア部分を理解して習得するプロセスを経験しよう、と思っていたところ、最近node.jsってよくきくなぁ、なんやろと調べるとサーバサイドjava script

java scriptは何か異常に苦手意識があって、シェアから考えても絶対知っておいたほうがいいと思うんですが、フロント側の実装に手がでないままでした。

ただ自分が多少馴染みのあるサーバサイドであればjava scriptに馴染みながら実装できるのではないか、と思って手を出しました。

気づいたら2冊手に取っててウケる。思い立ったその日の帰りに本屋で買って帰りました。 元々買おうとしていたのは入門用のはじめてのnode.jsでしたが、本屋で見かけて、クローラーは今後絶対何を開発するでも必要だと思ったので、ついでにやったれ!と思って買いました。

環境構築

Node.js

パッケージ持ってきて一発です。v5.5.0を選びました。

MacBook-Air:~ take$ node -v
v5.5.0

hello,world

公式サイトから。

const http = require('http');
const hostname = '127.0.0.1';
const port = 8000;

  http.createServer((req, res) => {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
  }).listen(port, hostname, () =>{
    console.log('Server running at http://${hostname}:${port}/');
  });

実行する。

MacBook-Air:node take$ node hello_world.js 
Server running at http://${hostname}:${port}/

(変数展開されんのかい)

f:id:take_she12:20160130114435p:plain:w300

ちなみにhello world部分を

res.end('Hello World'+ req.url);

として、http://localhost:8080/hoge とアクセスすると

Hello World/hoge

と表示された。

ちなみにdebugを指定するとdebugモードで動く。覚えておいたほうが良さそう。 nでステップ実行ができるし、面白いのがこのファイルだけじゃなくて内部moduleまで追いかけてるのは勉強になりそうだなあ。

MacBook-Air:node take$ node debug hello_world.js 
< Debugger listening on port 5858
connecting to 127.0.0.1:5858 ... ok
break in hello_world.js:1
> 1 const http = require('http');
  2 const hostname = '127.0.0.1';
  3 const port = 8000;
debug> n
break in hello_world.js:2
  1 const http = require('http');
> 2 const hostname = '127.0.0.1';
  3 const port = 8000;
  4 
debug> n
break in hello_world.js:3
  1 const http = require('http');
  2 const hostname = '127.0.0.1';
> 3 const port = 8000;
  4 
  5  http.createServer((req, res) => {
debug> n
break in hello_world.js:5
  3 const port = 8000;
  4 
> 5  http.createServer((req, res) => {
  6      res.writeHead(200, {'Content-Type': 'text/plain'});
  7        res.end('Hello World'+ req.url);
debug> n
break in hello_world.js:13
 11 
 12 
>13 });
debug> n
break in module.js:414
 412   if (depth === 0) stat.cache = new Map();
 413   const result = compiledWrapper.apply(this.exports, args);
>414   if (depth === 0) stat.cache = null;
 415   return result;
 416 };
debug> n
break in module.js:414
 412   if (depth === 0) stat.cache = new Map();
 413   const result = compiledWrapper.apply(this.exports, args);
>414   if (depth === 0) stat.cache = null;
 415   return result;
 416 };

終わりに

今日はここまで。プロセスやスレッドの挙動、apacheとの違いを一気に理解するチャンスなので、RestAPIパズルの記事で知ったWebを支える技術を買ったのでこれを読んで違いをまとめたい。

take-she12.hatenablog.com

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

余談

2/5に投稿予約したつもりが投稿されてなくてここで連続記録途切れてます。笑う。