Node.js - Hello World!

一樣先開虛擬機哦~

並且開啟終端機連進 server 裡面~

以下是 Node.js 官方網站的 web server 程式範例,我稍作小修改:

var http = require('http');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, '0.0.0.0');

console.log('Server running at http://0.0.0.0:1337/');

我們先在虛擬機的資料夾建立一個子資料夾 ‘HelloWorld’

在 HelloWorld 資料夾裡面建立一個 app.js

內容如上,存檔。

使用終端機進入 server :

$ vagrant ssh
$ cd /vagrant/HelloWorld
$ node app.js

到瀏覽器輸入 http://192.168.33.10:1337/

(或者是你的 Vagrantfile 裡面設定的 private IP)

即可看到 Hello World 了!

要關掉 Server 也非常簡單,回到下指令的地方,按下 ctrl + c 即可中斷程式

分析

簡單分析一下此段程式:

var http = require('http');

將 http 這個模組引入,並指定給物件 http

http.createServer(
	...
).listen(1337, '0.0.0.0');

先略過中間的 function 不看,
這段 code 的用意即是讓呼叫 http 物件中的 createServer 的方法, .listen() 則是設定該 server 要跑在哪個 port、hostname

function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}

上面的 code 則是原本在 .createServer() 裡的, 我們可以看一下 Node.js 的 API doc 關於此方法的部分

.createServer() 要帶入的東西其實是一個 requestListener,
也就是當 Server 跑起來時,我們開啟瀏覽器,輸入 127.0.0.1:1337 時,
Node.js Server 要回丟的東西,因此觀察一下此 listener:

function (req, res) {
	...
}

function 中帶入參數的是 req, res,意即 request, response,
request 即是 server 接收到 client 端的訊息,
response 則是 server 要回丟給 client 的訊息,
由於在此範例中,我們只是要回丟給 client 端一個 hello world 的訊息, 因此,我們不處理 client 送給 server 的 request, 我們只需處理要回丟給 client 的訊息,

res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');

寫網頁的開發者應該對一些關鍵字例如 Content-type, text/plain 不陌生,
第一行代表回傳給使用者的訊息中,HTTP HEAD 的設定是 http status code 200, 並且 Content-type 設定為 text/plain

res.writeHead(200, {'Content-Type': 'text/plain'});

那麼,以下這行 code 的意思即是,此次要回送給使用者的訊息到這裡結束,以 “Hello World” 作結尾

res.end('Hello World\n');

因此整段 code 看下來,就是一個非常簡單的 http server,

http://192.168.33.10:1337/ 總是會回傳 Hello World

今天就完成了我們的 Hello World 了!