2016年6月28日 星期二

Node.js筆記:Express

Express Web Framework

官方定義:
Web Applications

Express is a minimal and flexible Node.js web application framework that provides a robust set of features for web and mobile applications.

主要幫忙解決許多node.js http server 所需要的基本服務,讓開發http service 變得更為容易,不需要像之前需要透過層層模組(module)才有辦法開始編寫自己的程式。

使用Express之後, 它包裝了大多數繁複的HTTP低階操作, 使得我們的程式碼更為精簡.

安裝:
要不要-g(global)就看個人需求.

    npm install -g express

enter image description here

Why use Express?

  1. Express helps you respond to request with route support so that you may write responses to specific URLs.
  2. Supports multiple templating engines to simplify generating HTML.

Explanation of Routes

  • A router maps HTTP requests to a callback(針對從 Client 送來的 URL 做相對應的處理)
  • HTTP requests can be sent as GET/POST/PUT/DELETE …
  • URLs describe the location targeted.
  • To a request handler(callback)
    -> app.<HTTP請求類型>(url,handler{});
    app.get('/index', function(req, res){});

request: 連線要求的資訊和方法:
包含了瀏覽器傳來的各種信息,像是query ,body ,headers,都可以通過req對象訪問到。

response: 回應連線的資訊和方法
我們一般不從裡面取信息,而是通過它來定制我們向瀏覽器輸出的信息,比如 header 信息,比如想要向瀏覽器輸出的內容。這裡我們調用了它的 #send 方法,向瀏覽器輸出一個字符串。

app.get 可以帶入兩個參數,第一個是路徑名稱設定,第二個為Call back function),這裡面就如同前一篇介紹的 createServer 方法,裡面包含 request跟response 兩個物件。使用者就可以透過瀏覽器,輸入不同的url 切換到不同的頁面,顯示不同的結果。

Example:

var express = require('express');
var app = express();

app.get('/', function(req, res){
  res.send('This is GET method');
  res.end;
});

app.listen(process.env.PORT || 12345);

Express middleware

Express在處理一個連線要求時, 利用了middleware的設計, 讓開發者隨時可以自訂或擴充處理的流程. 也可以在適當的時機安插執行一些程式.

為了載入middleware要使用.use, 一個基本middleware長的樣子如下:

function logger(req, res, next){
  console.log(new Date(), req.method, req.url);
  next();
}

Middleware 會收到 3 個參數:
1. req 是 Request 物件,存放這此請求的所有資訊
2. res 是 Response 物件,用來回應該請求
3. next 用來控制流程

上面所寫的logger middleware會把每次request的時間, method還有url都列印在終端機上, 然後呼叫next()往下個middleware過去。Express.js的任務, 就是管理你所有middleware chain。

app.use 和 app.get

再來我們寫一個叫作hello的middleware:

function hello(req, res, next){
  res.write('Hello! \n');
  next();
}

將這個middleware加到我們的middlware chain中:

app.use(logger);
app.get('/hello', hello);
`app.use`表示 所有的request都會執行這個middleware
`app.get`表示 只有針對該URL 做 GET request的時候才會執行這個middleware

Reference:
1. http://expressjs.com
2. https://www.youtube.com/watch?v=czmulJ9NBP0
3. https://dca.gitbooks.io/nodejs-tw-wiki-book/content/book/node_express/node_express.html
4. https://stormpath.com/blog/how-to-write-middleware-for-express-apps
5. http://www.jollen.org/blog/2013/11/expressjs-middleware.html

沒有留言:

張貼留言