後端框架與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、圖片等),並將文件的內容送到瀏覽器。


留言
avatar-img
留言分享你的想法!
avatar-img
奧莉薇走在成為後端工程師之路上
18會員
138內容數
全端網頁開發專業知識分享
2025/04/26
※ 場景: 即時聊天應用: 設計一個支持多房間功能的即時聊天平台,像 WhatsApp、LINE或Facebook Messenger,提供文字、語音、視訊聊天功能,方便管理群組聊天。 功能亮點:加入特別功能,例如可加入多房間功能、使用者名單、表情符號支持、文件分享或訊息已讀未讀狀態。 展示
2025/04/26
※ 場景: 即時聊天應用: 設計一個支持多房間功能的即時聊天平台,像 WhatsApp、LINE或Facebook Messenger,提供文字、語音、視訊聊天功能,方便管理群組聊天。 功能亮點:加入特別功能,例如可加入多房間功能、使用者名單、表情符號支持、文件分享或訊息已讀未讀狀態。 展示
2025/04/26
※ 先建立基本的express後端服務: 1.建立新資料夾:Socket mkdir socket 2.進入資料夾:Socket cd ​bsocket 3. 安裝 Experss 到專案中 npm init -y //初始化專案,建立 package.json 檔 npm insta
Thumbnail
2025/04/26
※ 先建立基本的express後端服務: 1.建立新資料夾:Socket mkdir socket 2.進入資料夾:Socket cd ​bsocket 3. 安裝 Experss 到專案中 npm init -y //初始化專案,建立 package.json 檔 npm insta
Thumbnail
2025/04/10
※ 什麼是 Socket.io:一個基於傳統 WebSocket API 之上的框架。 ※ Socket.io常用功能: Custom Events:在 Socket.io 中,開發者可以創建自己的事件來處理特定的功能或需求。 Rooms:分組的功能。每個連接的用戶(或稱為 socket)可
Thumbnail
2025/04/10
※ 什麼是 Socket.io:一個基於傳統 WebSocket API 之上的框架。 ※ Socket.io常用功能: Custom Events:在 Socket.io 中,開發者可以創建自己的事件來處理特定的功能或需求。 Rooms:分組的功能。每個連接的用戶(或稱為 socket)可
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
使用靜態檔案下載 Bootstrap 的原因主要有以下幾點: 客製化:當你下載了 Bootstrap 的靜態檔案,你可以根據自己的需求來修改這些檔案。例如,你可以改變預設的顏色、字型大小、間距等,使其更符合你的網站風格。這是直接使用 CDN 所無法做到的。 效能優化:如果你的網站只使用 Boot
Thumbnail
使用靜態檔案下載 Bootstrap 的原因主要有以下幾點: 客製化:當你下載了 Bootstrap 的靜態檔案,你可以根據自己的需求來修改這些檔案。例如,你可以改變預設的顏色、字型大小、間距等,使其更符合你的網站風格。這是直接使用 CDN 所無法做到的。 效能優化:如果你的網站只使用 Boot
Thumbnail
※ 視圖模板 視圖模板(View Templates) 是在 MVC 架構中負責展示數據的 HTML 文件,包含模板語法,用於在渲染時插入實際數據。它們的主要目的是分離數據與展示邏輯,讓代碼更加模塊化和易於維護。 視圖模板設計和使用的核心理念,就是「重複的事情不要重複做、效益最大化、有效利用資源
Thumbnail
※ 視圖模板 視圖模板(View Templates) 是在 MVC 架構中負責展示數據的 HTML 文件,包含模板語法,用於在渲染時插入實際數據。它們的主要目的是分離數據與展示邏輯,讓代碼更加模塊化和易於維護。 視圖模板設計和使用的核心理念,就是「重複的事情不要重複做、效益最大化、有效利用資源
Thumbnail
※ 靜態資源回傳 ※ 什麼是靜態資源: 定義:是指事先準備好的資源,這些資源在伺服器上是靜態的、不會隨著每個請求而改變。 資源通常包括: 靜態 HTML 文件。 CSS。 圖像(Image)。 Video。 字體文件:google fonts。 favicon:網頁名稱旁邊的ico
Thumbnail
※ 靜態資源回傳 ※ 什麼是靜態資源: 定義:是指事先準備好的資源,這些資源在伺服器上是靜態的、不會隨著每個請求而改變。 資源通常包括: 靜態 HTML 文件。 CSS。 圖像(Image)。 Video。 字體文件:google fonts。 favicon:網頁名稱旁邊的ico
Thumbnail
需求情境: 在設計畫面時,資料來源是後台的 api,每一次畫面細節的修修改改,都會觸發 Xcode Preview 程序,導致不斷呼叫後台。此時若資料結構和大小都具有一定規模,就會導致效率低落,不斷等待,且消耗伺服器資源甚鉅。 解決方案: 將後台傳回的資料以檔案形式暫存在本地端,每次 pr
Thumbnail
需求情境: 在設計畫面時,資料來源是後台的 api,每一次畫面細節的修修改改,都會觸發 Xcode Preview 程序,導致不斷呼叫後台。此時若資料結構和大小都具有一定規模,就會導致效率低落,不斷等待,且消耗伺服器資源甚鉅。 解決方案: 將後台傳回的資料以檔案形式暫存在本地端,每次 pr
Thumbnail
自訂元件生成位置顧名思義就是可以指定部分HTML區塊渲染在特定的畫面上,即使在不同組件也能把A組件內的部分畫面,展現在B組件上,以下方程式舉例。
Thumbnail
自訂元件生成位置顧名思義就是可以指定部分HTML區塊渲染在特定的畫面上,即使在不同組件也能把A組件內的部分畫面,展現在B組件上,以下方程式舉例。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News