iT邦幫忙

5

[NodeJS] 第一次 NodeJS 就上手 Part 1

Javascript 越來越紅,NodeJS 也越來越強大,說真的,在十幾年前怎麼也不會想到 Javascript 這個東西可以在後端執行。但是他就是真的發生了,也許會覺得很神奇,不過,既然有新的東西不斷地冒出來,那麼適時的去接觸也是挺合理的。

是說 JS 寫來寫去都沒有長進的說(抹臉

NodeJS

作者是這位天才 Ryan Dahl,把 Google 的 v8 引擎拿來寫出一套 framework,就叫做 nodejs。至於你說他能幹麼?以他目前快速發展的狀況來看,不知道以後能不能_上太空?_

語言特性是這樣,由於是從 Javascript 演進而來,所以是相當純粹的事件驅動(event driven)的方式在運作,沒有任何的阻塞(blocking)的問題,寫起來跟一般的 Javascript 沒什麼兩樣,就是不斷地 callback、callback、再 callback…

缺點是

如果不搭配一些模組的話,要實做一個 HTTP Server,幾乎是要從 HTTP 連線協定開始做起。個人覺得,難度是一回事,去理解這些事情又是另一回事。把他列為缺點其實也是嚴重了點,充其量只是說,要去做這些事情稍顯繁雜而已(被揍飛

第一次

既然說是第一次就上手,那麼上述那些複雜的東西就留給大家自己去研究。我們這邊來講一些輕鬆寫意又自然的東西,首先,你可能必須要知道的事情有,

NodeJS
NPM
CoffeeScript

NPM(Node Package Manager)是一個 NodeJS 的套件管理系統,原本與 NodeJS 是拆開來的,後來在 0.6.x 之後就放在一起了。這個東西相當的方便,你需要什麼套件,用他來安裝、移除、更新就可以了。

至於說 CoffeeScript 嘛,因為他是新的東西所以我放了上來(眾歐

首先是要安裝 nodejs,你可以去他的官網下載壓縮檔,下載下來就可以裝了,以下都是以 Ubuntu/node-0.6.14 為例子,

wget -c http://nodejs.org/dist/v0.6.14/node-v0.6.14.tar.gz
tar zxf node-v0.6.14.tar.gz
cd node-v0.6.14
./configure
make
sudo make install

如果不能安裝,你可能需要安裝下列套件,
git-core curl build-essential openssl libssl-dev

當然,身為 Ubuntu 的使用者,加個 PPA 用 apt 來裝也是很合理的,

sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs

裝好之後就可以看一下版本,

$ node -v
v0.6.14

$ npm -v
1.1.12

這樣就裝完了。另外,用 PPA 安裝的 NodeJS,我在檢查 NPM 版本的時候會怪怪的,不知道最近有沒有改掉?

Web Server

我們要用 NodeJS 來作一個簡易的 Web Server,但是我不想自己刻協定怎麼辦?沒關係,我們找一些模組來用,

connect
expressjs
geddyjs

其中 GeddyJS 是比較特殊的,他是一個蠻標準的 MCV 架構的套件,但是我之所以沒有用他的原因,是他的 View 使用的是 EJS,而我用的是另一套叫做 Jade。所以,把他列出來是想說,應該也有不少使用 EJS 的高手,所以放上來給大家參考一下。

至於 connect 則是因為,他有很多 Middleware 可以使用,如果你覺得你用不到,你不裝也是可以的。由於我在後面會講到一些東西,是要使用他的,所以這邊就先裝起來放了。

怎麼安裝?

$ npm install connect
$ npm install express

裝好之後就可以開使用了,什麼?太簡單?沒辦法啊,就這麼簡單。然後我們可以開始寫第一支 js 了,

var express = require("express"),
app = express.createServer(express.logger());

app.get("/", function(req, res) {
    res.sendfile(__dirname + '/index.html', function(err) {
        if (err) res.send(404);
    });
});

port = process.env.PORT || 3000;
app.listen(port, function() {
    console.log("Listening on " + port);
});

然後,我們再準備一支 index.html 來當作我們的輸出,

<h1>Hello NodeJS</h1>

接著就可以把 NodeJS 跑起來了,

$ node web.js

然後用你的瀏覽器打開 http://localhost:3000/ 就看得到結果了。然後或許你就想,哇,好方便,那我就一直寫 app.get 然後不斷地增加 html 檔案,就可以做完靜態網站了耶!

錯!

萬一我要用圖片怎麼辦?我的 Javascript 外部檔案怎麼辦?我的 CSS 檔案怎麼辦?沒關係,哥哥我都幫你想好了,

var express = require("express"),
app = express.createServer(express.logger());

app.get("/", function(req, res) {
    res.sendfile(__dirname + '/index.html', function(err) {
        if (err) res.send(404);
    });
});

app.get(/(.*)\.(jpg|gif|png|ico|css|js|txt)/i, function(req, res) {
    res.sendfile(__dirname + "/" + req.params[0] + "." + req.params[1], function(err) {
        if (err) res.send(404);
    });
});

port = process.env.PORT || 3000;
app.listen(port, function() {
    console.log("Listening on " + port);
});

嗯,我們用一點小小地正規,只要把網址過濾一下,並且將合法的檔案直接送往前端,這樣就解決囉!至於你說會不會有 mime-type 的問題?嗯,這些事情他已經幫你解決掉了,除非你是使用相當特殊的文件,否則不會遇到檔案類別問題。

歐,我們的靜態網站做完了,可以收工了(


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言