後端框架與API 開發(二) – 靜態資源

閱讀時間約 12 分鐘

※ 靜態資源回傳

※ 什麼是靜態資源:

  • 定義:伺服器上預先準備好的、不會隨著每次請求改變的檔案。這些檔案不需要伺服器進行額外處理,只需透過伺服器提供的連結,即可讓瀏覽器直接下載。
  • 資源通常包括:
  1. 靜態 HTML 文件。
  2. CSS。
  3. 圖像(Image)。
  4. Video。
  5. 字體文件:google fonts。
  6. favicon:網頁名稱旁邊的icon。
  7. robots.txt:避免網站因要求過多而超載。
  8. sitemap:叫做網站地圖,是一種用來提供關於網站內的一些基本資訊的檔案。

※ 靜態資源和動態資源的區別:

  • 不是依據網頁中的元素會不會動。
  • 是依據資源是否事先準備好。
  • 以圖片來說
  1. 請求(request)前就已經準備好,就叫做靜態資源。
  2. 請求(request)後才動態生成的圖片(AI生成),就叫做動態資源。
  • 以餐廳來說
  1. 餐廳在客人光臨前就已經把菜單準備好了,此時菜單就叫做靜態資源。
  2. 客人向餐廳點了一份漢堡,漢堡經過廚房製作後,端到客人面前。此時漢堡就叫做動態資源。

※ 靜態資源回傳實際操作範例介紹

  • 提供file.txt 的回傳
  1. res.sendFile():將指定路徑的文件發送到客戶端。

(一)首先在file資料夾中建立txt資料夾。在txt資料夾內建立test.txt檔案,並在檔案內容放假資料。

//打造web server應用程式
const express = require("express") //載入express套件
const app = express() //建立application實例
const path = require("path") //取得絕對路徑;path是內建模組,專門處理文件和目錄的路徑。

//設定根路由
app.get("/", (req, res) => {
res.send("hello, world")
})

//第一種回傳file.txt;取得靜態資源,利用res.sendFile
app.get("/txt", (req, res) => {
//確保程式在不同的作業系統上取得專案資料夾的絕對路徑
const absPath = path.join(__dirname, "/file/test.txt")
//載入檔案發生錯誤時的處理方式
res.sendFile(absPath, (err) => {
console.log(err)
})
}
)

//設立錯誤訊息
// 通配符路由,捕捉所有其他未定義的 GET 請求
app.get("/*", (req, res) => {
res.send("Not found")
})

//監聽port
app.listen(3000, () => {
console.log('express app listen on port 3000')
})
raw-image
  1. 設定public folder:用於存放應用程式的靜態資源。

(二)首先建立public資料夾。在public資料夾內建立text資料夾內建立test.txt檔案,並在檔案內容放假資料。

//打造web server應用程式

const express = require("express") //載入express套件

const app = express() //建立application實例
// 第二種回傳file.txt;當他的請求路徑是static時才提供public folder
app.use("/static", express.static("public"))//告訴 Express 靜態檔案的資料夾位置

//設定根路由

app.get("/", (req, res) => {

res.send("hello, world")

})


//設立錯誤訊息
// 通配符路由,捕捉所有其他未定義的 GET 請求
app.get("/*", (req, res) => {

res.send("Not found")

})

//監聽port

app.listen(3000, () => {

console.log('express app listen on port 3000')

})
raw-image
  • 提供html的回傳
  1. res.sendFile()

(一)在file資料夾中建立html資料夾。在html資料夾內建立test.html檔案,並使用Vs Code快速鍵建立html資料。

//打造web server應用程式

const express = require("express") //載入express套件

const app = express() //建立application實例

const path = require("path") //取得絕對路徑

//設定根路由

app.get("/", (req, res) => {

res.send("hello, world")

})

//回傳html
app.get('/getHtml', (req, res) => {
//取得專案資料夾的絕對路徑
const absPath = path.join(__dirname, "/file/html/test.html")
//載入檔案發生錯誤時的處理方式
//先定義一個絕對路徑,取得事先準備好的資源
res.sendFile(absPath, (err) => {
console.log(err)
})
})

//設立錯誤訊息
// 通配符路由,捕捉所有其他未定義的 GET 請求

app.get("/*", (req, res) => {

res.send("Not found")

})

//監聽port

app.listen(3000, () => {

console.log('express app listen on port 3000')

})
raw-image
  1. 設定public folder

(二)在public資料夾內建立html資料夾。在html資料夾內建立test.html檔案,並使用Vs Code快速鍵(html)建立html資料。

//打造web server應用程式

const express = require("express") //載入express套件

const app = express() //建立application實例

// 第二種回傳file.txt;當他的請求路徑是static時才提供public folder

app.use("/static", express.static("public"))//一樣無須修改

//設定根路由

app.get("/", (req, res) => {

res.send("hello, world")

})

//設立錯誤訊息

// 通配符路由,捕捉所有其他未定義的 GET 請求

app.get("/*", (req, res) => {

res.send("Not found")

})

//監聽port

app.listen(3000, () => {

console.log('express app listen on port 3000')

})
raw-image
  • 提供Image的回傳

(一)在file資料夾中建立image資料夾。在image資料夾內建立image檔案。

//打造web server應用程式

const express = require("express") //載入express套件

const app = express() //建立application實例

const path = require("path") //取得絕對路徑

//設定根路由

app.get("/", (req, res) => {

res.send("hello, world")

})


//提供image
app.get('/getImage', (req, res) => {
//取得專案資料夾的絕對路徑
const absPath = path.join(__dirname, "/file/image/angels-1.jpg")
//載入檔案發生錯誤時的處理方式
//先定義一個絕對路徑,取得事先準備好的資源
res.sendFile(absPath, (err) => {
console.log(err)
})
})

//設立錯誤訊息
// 通配符路由,捕捉所有其他未定義的 GET 請求
app.get("/*", (req, res) => {

res.send("Not found")

})

//監聽port

app.listen(3000, () => {

console.log('express app listen on port 3000')

})
raw-image
  1. 設定public folder, html 即可寫入 <img src=“” />。

(二)在public資料夾內建立image資料夾。在image資料夾內建立image檔案。


//打造web server應用程式

const express = require("express") //載入express套件

const app = express() //建立application實例

// 第二種回傳file.txt;當他的請求路徑是static時才提供public folder

app.use("/static", express.static("public"))//一樣無須修改

//設定根路由

app.get("/", (req, res) => {

res.send("hello, world")

})

//設立錯誤訊息

// 通配符路由,捕捉所有其他未定義的 GET 請求

app.get("/*", (req, res) => {

res.send("Not found")

})

//監聽port

app.listen(3000, () => {

console.log('express app listen on port 3000')

})
raw-image

※ res.send()和res.sendFile()的差別

res.send() 和 res.sendFile() 都是靜態資源回傳的方法,但它們的用途有所不同:

  • res.send()當你想要給瀏覽器回傳資訊時,可以使用 res.send()。這些資訊可以是文字、數字、陣列或者物件。如果回傳的是物件或陣列,res.send() 會自動把它們轉換成 JSON 格式,讓瀏覽器可以輕鬆讀取。
  • res.sendFile()當你想要給瀏覽器回傳一個文件時,可以使用 res.sendFile();並且提供要發送文件的絕對路徑。然後,res.sendFile() 會自動處理許多細節,包括告訴瀏覽器文件的類型(如 HTML、圖片等),並將文件的內容送到瀏覽器。


    全端網頁開發專業知識分享
    留言0
    查看全部
    avatar-img
    發表第一個留言支持創作者!
    ※ 補充說明: ※ npm 常用指令: ◦ npm init–y:快速初始化一個新的 Node.js 並建立一個 package.json 文件的命令。 ◦ npm info 套件名稱 version:快速查詢指定 npm 套件的最新版本號。 ◦ npm install套件名稱:用來安裝
    ※ 轉接器模式 定義: 轉接器模式是一種結構型設計模式(有時也被稱為wrapper或裝飾模式),用於將一個類(class)的接口轉換成客戶端所期望的另一個接口。這使得原本因接口不匹配而無法工作的類(class)可以一起工作,讓接口不兼容的類別能夠合作無間。 ※ 數字到字符的轉換過程範例 /
    ※ 生產者和消費者模式 定義: 生產者和消費者在同一時間內共同存取某一個資料空間。生產者負責生成數據並將其放入共享空間,消費者負責從共享空間中取走數據進行處理。兩者之間互不相干,也不須互相知道對方的存在。 共同存取資料空間:生產者和消費者共享同一個資料空間。這個空間通常是緩衝區或隊列,用於在它
    ※ 觀察者模式 定義: 觀察者模式(Observer Pattern)是一種設計模式,涉及兩個主要角色:觀察者(Observers)和被觀察者(Subject)。在這種模式中,一群觀察者訂閱並觀察某個被觀察的對象。當被觀察者的狀態發生改變時,它會通知所有觀察者,讓他們知曉並作出相應的反應。這種模
    ※ 工廠模式 定義: 工廠模式是一種實現了「工廠」概念的物件導向設計模式。它提供一個通用的工廠介面,將創建instance(實例)的程式碼交由子類別各自實現,並根據需求去動態地生成相應的物件。這種模式將物件的創建邏輯與使用邏輯分開,使程式碼更容易維護和擴展。 特點: 具有高度標準化和同質性的
    ※ 單例模式介紹 ※ 定義:單例模式是一種設計模式,確保一個class(類)只有一個實例,並提供一個存取它的全域存取點。無論如何取值,皆只對這個實例取值。 ※ 目的:保證一個類別只會產生一個物件,而且提供存取該物件的統一方法。 ※ 講解:單例模式確保一個類無論怎麼 new 或 get,都只能拿
    ※ 補充說明: ※ npm 常用指令: ◦ npm init–y:快速初始化一個新的 Node.js 並建立一個 package.json 文件的命令。 ◦ npm info 套件名稱 version:快速查詢指定 npm 套件的最新版本號。 ◦ npm install套件名稱:用來安裝
    ※ 轉接器模式 定義: 轉接器模式是一種結構型設計模式(有時也被稱為wrapper或裝飾模式),用於將一個類(class)的接口轉換成客戶端所期望的另一個接口。這使得原本因接口不匹配而無法工作的類(class)可以一起工作,讓接口不兼容的類別能夠合作無間。 ※ 數字到字符的轉換過程範例 /
    ※ 生產者和消費者模式 定義: 生產者和消費者在同一時間內共同存取某一個資料空間。生產者負責生成數據並將其放入共享空間,消費者負責從共享空間中取走數據進行處理。兩者之間互不相干,也不須互相知道對方的存在。 共同存取資料空間:生產者和消費者共享同一個資料空間。這個空間通常是緩衝區或隊列,用於在它
    ※ 觀察者模式 定義: 觀察者模式(Observer Pattern)是一種設計模式,涉及兩個主要角色:觀察者(Observers)和被觀察者(Subject)。在這種模式中,一群觀察者訂閱並觀察某個被觀察的對象。當被觀察者的狀態發生改變時,它會通知所有觀察者,讓他們知曉並作出相應的反應。這種模
    ※ 工廠模式 定義: 工廠模式是一種實現了「工廠」概念的物件導向設計模式。它提供一個通用的工廠介面,將創建instance(實例)的程式碼交由子類別各自實現,並根據需求去動態地生成相應的物件。這種模式將物件的創建邏輯與使用邏輯分開,使程式碼更容易維護和擴展。 特點: 具有高度標準化和同質性的
    ※ 單例模式介紹 ※ 定義:單例模式是一種設計模式,確保一個class(類)只有一個實例,並提供一個存取它的全域存取點。無論如何取值,皆只對這個實例取值。 ※ 目的:保證一個類別只會產生一個物件,而且提供存取該物件的統一方法。 ※ 講解:單例模式確保一個類無論怎麼 new 或 get,都只能拿
    你可能也想看
    Google News 追蹤
    一個人默默翻著資料。
    等等!靜靜的!默默的!
    Thumbnail
    需求情境: 在設計畫面時,資料來源是後台的 api,每一次畫面細節的修修改改,都會觸發 Xcode Preview 程序,導致不斷呼叫後台。此時若資料結構和大小都具有一定規模,就會導致效率低落,不斷等待,且消耗伺服器資源甚鉅。 解決方案: 將後台傳回的資料以檔案形式暫存在本地端,每次 pr
    Thumbnail
    自訂元件生成位置顧名思義就是可以指定部分HTML區塊渲染在特定的畫面上,即使在不同組件也能把A組件內的部分畫面,展現在B組件上,以下方程式舉例。
    Thumbnail
    軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
    Thumbnail
    CSR(Client Side Rendering)是一種將渲染資料的過程交由瀏覽器端處理的方法。
    介紹 大家第一次聽到,static 肯定很陌生。簡單來說,這個東西就是拿來存放一些我們經常會用到的檔案,比方說: CSS、JS、Image、Audio、Video...... 只要是網頁上可能會用到的檔案,我們基本上都會存在 static 當中,方便我們可以在不同路徑中,快速的存取這些檔案
    Thumbnail
    靜態網頁和動態網頁在功能、內容和互動性方面有所不同。靜態網頁通常用於展示公司網站、部落格文章或商品頁面等靜態內容,而動態網頁則用於用戶註冊、登錄、購物車等互動功能。
    Thumbnail
    前言 現在的前端需求已經越來越高,要考慮HTML及CSS的切版美觀程度,以及React以及Flutter所提出的元件(Componet、widget)觀念,也就是將元件模組化,使元件可以更動態的被程式運行,而不用靜態的客製化每一個介面。開發一個好的元件可以提升整體的開發速度,讓任何使用元件的開發者
    Thumbnail
    先前幾篇筆記介紹了網路請求,瀏覽器儲存資料的方式,那麼實務上,前端最常需要發送網路請求的時候,就是透過呼叫 API,去向後端工程師發送/請求資料,所以今天來記錄什麼是 API吧!
    一個人默默翻著資料。
    等等!靜靜的!默默的!
    Thumbnail
    需求情境: 在設計畫面時,資料來源是後台的 api,每一次畫面細節的修修改改,都會觸發 Xcode Preview 程序,導致不斷呼叫後台。此時若資料結構和大小都具有一定規模,就會導致效率低落,不斷等待,且消耗伺服器資源甚鉅。 解決方案: 將後台傳回的資料以檔案形式暫存在本地端,每次 pr
    Thumbnail
    自訂元件生成位置顧名思義就是可以指定部分HTML區塊渲染在特定的畫面上,即使在不同組件也能把A組件內的部分畫面,展現在B組件上,以下方程式舉例。
    Thumbnail
    軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
    Thumbnail
    CSR(Client Side Rendering)是一種將渲染資料的過程交由瀏覽器端處理的方法。
    介紹 大家第一次聽到,static 肯定很陌生。簡單來說,這個東西就是拿來存放一些我們經常會用到的檔案,比方說: CSS、JS、Image、Audio、Video...... 只要是網頁上可能會用到的檔案,我們基本上都會存在 static 當中,方便我們可以在不同路徑中,快速的存取這些檔案
    Thumbnail
    靜態網頁和動態網頁在功能、內容和互動性方面有所不同。靜態網頁通常用於展示公司網站、部落格文章或商品頁面等靜態內容,而動態網頁則用於用戶註冊、登錄、購物車等互動功能。
    Thumbnail
    前言 現在的前端需求已經越來越高,要考慮HTML及CSS的切版美觀程度,以及React以及Flutter所提出的元件(Componet、widget)觀念,也就是將元件模組化,使元件可以更動態的被程式運行,而不用靜態的客製化每一個介面。開發一個好的元件可以提升整體的開發速度,讓任何使用元件的開發者
    Thumbnail
    先前幾篇筆記介紹了網路請求,瀏覽器儲存資料的方式,那麼實務上,前端最常需要發送網路請求的時候,就是透過呼叫 API,去向後端工程師發送/請求資料,所以今天來記錄什麼是 API吧!