Node.js 的 30 天學習日記--第十九天

Node.js 學習第十九天

………….略。

如果在看的過程中有任何錯誤歡迎寫 E-MAIL: pp840405@gmail.com 提醒我錯誤。


middleware (完)

如下程式碼,如果在輸入網址時候沒有進入首頁直接到別的路徑 127.0.0.1:3000/dgewqsdc 像這樣進入後你看 node 執行會給你 會員登入的 console 資料,但我們並沒有設計這個路徑為什麼它會顯示 console 資料呢? 原因在於在撈資料時後會一行一行往下看沒有設攔截點就會跑完可以使用的函式。

1
2
3
4
5
6
7
8
9
10
11
12
13
var express = require('express');
var app = express();
app.get('/',function(req,res){
res.send('<html><head></head><body><h1>登入</h1></body></html>')
});
app.use(function(req,res,next){
consloe.log('會員登入')
//下一步
next();
});
//監聽 port
var port = process.env.PORT || 3000;
app.listen(port);

正確的方法,也可以用來 debug 。
HTTP狀態碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var express = require('express');
var app = express();
app.get('/',function(req,res){
res.send('<html><head></head><body><h1>登入</h1></body></html>')
});
app.use(function(req,res,next){
consloe.log('會員登入')
//下一步
next();
});
app.use(function(req,res,next){
//請求失敗,請求所希望得到的資源未被在伺服器上發現,但允許用戶的後續請求。
res.status(404).send('抱歉,此頁面並不存在');
});
app.use(function(req,res,next){
//通用錯誤訊息,伺服器遇到了一個未曾預料的狀況,導致了它無法完成對請求的處理。
res.status(500).send('抱歉,程式出現錯誤');
});
//監聽 port
var port = process.env.PORT || 3000;
app.listen(port);


  1. 可以把 middleware 獨立出來作使用。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    var express = require('express');
    var app = express();

    var login =function(req,res,next){
    consloe.log('會員登入')
    //下一步
    next();
    };
    app.use(login)
    app.get('/',function(req,res){
    res.send('<html><head></head><body><h1>登入</h1></body></html>')
    });
    //監聽 port
    var port = process.env.PORT || 3000;
    app.listen(port);
  2. 放在 get 上面也是可以

    1
    2
    3
    4
    5
    6
    7
    8
    9
    var login =function(req,res,next){
    consloe.log('會員登入')
    //下一步
    next();
    };
    //先取得網頁在經過 login 的判斷在到執行函式 由左至右
    app.get('/',login,function(req,res){
    res.send('<html><head></head><body><h1>登入</h1></body></html>')
    });
  3. 也可以在這邊作判斷設定

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var login =function(req,res,next){
    var _url = req.url;
    if(_url == '/'){
    nexy()
    }else{
    res.send('資料錯誤無法登入')
    }
    };
    //先取得網頁在經過 login 的判斷在到執行函式 由左至右
    app.get('/',login,function(req,res){
    res.send('<html><head></head><body><h1>登入</h1></body></html>')
    });

static - 載入靜態檔案

如果再傳送資料那邊些入靜態檔案是沒辦法的,雖然你指定首頁了但是它不知道你首頁在哪個路徑上,所以就要用到 static 的方法。

錯誤示範

1
2
3
4
5
6
7
8
var express = require('express');
var app = express();
app.get('/',function(req,res){
res.send('<html><head></head><body><img src="/images/logo.png"></body></html>')
});
//監聽 port
var port = process.env.PORT || 3000;
app.listen(port);

原本 project 資料夾裡面有 images 資料夾放了 logo.png 檔,增加這段程式碼後就要在 project 資料夾內新增一個 public 資料夾,然後把擁有靜態檔案的資料夾( images )放進去,這樣就可以知道你的檔案在哪了。

正確示範

1
2
3
4
5
6
7
8
9
10
var express = require('express');
var app = express();
//讀取 public 資料夾內的所有靜態檔案。需要把這段程式碼放入最上面,這樣後面的資料就可以吃到這段
app.use(express.static('public'))
app.get('/',function(req,res){
res.send('<html><head></head><body><img src="/images/logo.png"></body></html>')
});
//監聽 port
var port = process.env.PORT || 3000;
app.listen(port);

六角學院擁有


結語

…….,有任何問題歡迎寫 MAIL: pp840405@gmail.com 一起共同討論。