2013年6月7日 星期五

在 Ubuntu 的 Node.js 使用初體驗

安裝及環境設定

首先要安裝 Node.js,由於 Node.js 是一個快速發展中的網頁框架,Ubuntu 內建的 Node.js 版本當然就很容易老舊過時,還好官方準備了 Debian/Ubuntu 的套件庫可以直接使用。

curl -sL https://deb.nodesource.com/setup_5.x | sudo -E bash -
sudo apt-get install -y nodejs

建立專案

接下來是使用 npm 手動建立一個 Node.js 的專案,照著指示做就可以了。

$ mkdir myapp
$ cd myapp
$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install  --save` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (myapp) 
version: (1.0.0) 
description: 
entry point: (index.js) 
test command: 
git repository: 
keywords: 
author: 
license: (ISC) 
About to write to /home/sylee/myapp/package.json:

{
  "name": "myapp",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this ok? (yes)

接下來照著 Node.js 官方網站上的第一個範例建立一個簡單的 HTTP Server。

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

將以上的內容寫入 server.js 然後修改 package.json 在 "scripts" 裡面加入 "start": "node server.js"。

{
  "name": "myapp",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node server.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

然後就可以使用 npm start 來啟動 Server 啦。


> myapp@0.0.0 start /home/sylee/myapp
> node server.js

Server running at http://127.0.0.1:1337/

使用模組

如果說要整個重頭寫 HTTP Server 提供所有的內容一定是很吃力的,所以當然就是要使用別人寫好的 node module 來做快速開發。

接下來要來使用 Express.js 首先是安裝它。

$ npm install --save express

然後就可以將先前的 server.js 改寫。

var express = require('express');
var app = express();
app.get('/hello.txt', function(req, res){
  var body = 'Hello World';
  res.setHeader('Content-Type', 'text/plain');
  res.setHeader('Content-Length', body.length);
  res.end(body);
});
app.listen(3000);
console.log('Listening on port 3000');

然後重新執行 npm start 啟動 Server 就可以在 http://localhost:3000/hello.txt 看到結果了。

這個例子與先前的例子之間的差別是: http://127.0.0.1:1337 底下無論任何的路徑 http://127.0.0.1:1337/foo http://127.0.0.1:1337/bar 都是看到一樣的結果,而 http://localhost:3000 就只有 http://localhost:3000/hello.txt 可以看到 Hello World 其它的路徑就只能看到 Cannot GET balabala