2018年6月10日 星期日

【Express(2)】use守門員/static()



如何驗證路徑? ——use函數

學習教材:六角學院/ NodeJS 前後端開發實戰(講解非常清楚&可以問到飽,大推!)
//其他邏輯省略
app.use(function (req, res, next) {
    console.log("有人連線囉") 
    next()

})

app.get("/user/:name", function (req, res) {
    var Myname = req.params.name
    res.send(Myname + "你好")
})
  • use中可以寫一些邏輯去進行判斷,如果OK,就執行next()
  • 如果沒有next(),就永遠無法連到”/user/:name”路徑上
//其他邏輯省略

app.get("/user", function (req, res) {
    res.send("你好")
})

app.use(function (req, res, next) {
    console.log("有人連線囉") 

})

app.get("/user/:name", function (req, res) {
    var Myname = req.params.name
    res.send(Myname + "你好")
})



第一個路徑可以被輸出
但第二個路徑因為通不過app.use的next(),所以會連不上



如果根本沒有這個路徑,也可以用use()函數告訴使用者

  • res.status(404) :回傳錯誤訊息
app.use(function (req, res, next) {
    console.log("有人連線囉")
    next()

})

app.get("/", function (req, res) {
    res.send("你好")
})

app.use(function (req, res, next) {
    res.status(404).send("找不到頁面")
})



如果程式錯誤err,可以用use()函式


app.get("/", function (req, res) {
    res.send("你好")
})

//use(1)
app.use(function (req, res, next) {
   console.log("連線囉")
   kk()   //因為這是錯誤程式碼,所以會自動跳到use(3) -->這是express的規則
//這行如果刪掉就可以跑use(2) 
   next()
})

//use(2)網站通常會加上這兩條程式碼
app.use(function (req, res, next) {
    res.status(404).send("找不到頁面")
})

//use(3) 網站通常會加上這兩條程式碼
app.use(function (err, req, res, next) {
    res.status(500).send("程式有問題")
})


get和use的整合寫法

//省略連線
//把use獨立寫出來

var login = function (req, res, next) {
    console.log("有人連線囉")
//裡面可以做一些邏輯判斷
    next()
}

app.get("/", login, function (req, res) {
    res.send("你好")
})




利用use()和static()增加靜態檔案

在專案下設定一個公開資料夾

app.use(express.static("public")) //把publuc資料夾設立為靜態檔案的「根目錄」

app.get("/", function (req, res) {
    res.send("你好" + "<img src='/images/logo.png'></img>")
//引入logo的路徑
})


沒有留言:

張貼留言

【JavaScript】用物件Mapping的方法

If的寫法 我們希望當變數是a時就回傳1,變數是b就回傳2,變數是c就會回傳3,一般寫法就是用if,但是這樣會很冗 ​ // IF style var word if(word == 'a'){ word = 1 } else if...