iT邦幫忙

0

Day 3|換成Express後,路由判斷少寫了一半的程式碼

  • 分享至 

  • xImage
  •  

前兩天都用Node.js原生的http模組手刻邏輯,今天正式安裝Express,實際比較用框架前後,同樣的功能程式碼量差多少,過程中也出現了一個複製貼上的坑。

今天做的事
安裝Express:

node install express 

把路由改成Express的寫法:

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

app.get('/', (req, res) => {
  res.send('這是首頁');
});

app.get('/about', (req, res) => {
  res.send('這是關於頁面');
});

app.get('/success', (req, res) => {
  res.status(200).send('請求成功');
});

app.get('/notfound', (req, res) => {
  res.status(404).send('找不到這個頁面');
});

app.listen(3000, () => {
  console.log('伺服器啟動於 http://localhost:3000');
});

卡關:路由重複,Express不會提醒
一開始複製貼上路由後忘記把/success的路由修改,變成又寫了一次/about,結果瀏覽器打開/success的時候,出現Connot GET /success,原本以為是伺服器沒重啟,重開了好幾次都沒用,後來檢查程式碼的時候,才發現是我沒有改到/success的部分。

這件事讓我知道:Express不會提醒我路由重複,重複的路由只是不會被執行到,除錯時要回頭逐行檢查路徑名稱,不能只看有沒有紅字警告。

觀察:Express幫我做了什麼
打開瀏覽器開發者工具的Network分頁,檢查Response headers,發現多了一行完全沒自己寫過的內容:

X-Powered-By: Express

對照昨天用原生http十,Content-Type要自己動手setHeader才會出現;換成Express的res.send()後,這些標頭都被自動補上了。過程中也意外發現瀏覽器快取機制,重新整理時Status Code顯示304 Not Modified,代表瀏覽器直接使用了上次拿到的內容,沒有重新下載,要用Ctrl+Shift+R重新整理後才會看到完整的200 ok回應。

心得
原本用http模組要自己判斷req.url是哪個路徑,換成Express之後,app.get('/xxx', ...)直接對應一個路徑,程式碼乾淨了許多,不過也因為框架把很多事情藏起來了,如果前兩天沒有先搞懂原生http的運作方式,直接學Express可能會變成 會用但不知道背後在幹嘛,這也證實了一開始規劃 先手刻再學框架 的順序是對的。

今天另一個收穫是搬家:專案資料夾在D槽某個路徑下,Git一直出現Permission denied,怎麼用管理員權限開都只能解決一次,後來詢問claude之後,把整個專案資料夾搬到C槽的使用者資料夾底下才徹底的解決,看來是那個路徑被其他程式鎖定造成的。


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言