iT邦幫忙

2026 iThome 鐵人賽

DAY 8
0

day08_title

前言

以前老 nodejs 玩家肯定知道 express, koa Fastify 等相關框架可以快速啟動 web services
在 nodejs 的世界裡,能開一個 api 已經作為一個標配,當然這樣的事情在 bun 也一樣可以做到
以前 express 的賣點就是可以一行搞定 web serice
現在隨著時代進化,有了 bun 他基本上本身就可以做到一樣的事情,但效能相較於 express
基本上是碾壓般的存在

我們這就開始

一行搞定的 HTTP Server

Bun.serve({
  fetch(req) {
    return new Response('一行搞定!輕輕鬆鬆')
  }
});

我們迅速把服務起起來

bun run index.ts

不過因為資訊量蠻少的,基本上 Bun 預設服務會跑在 3000 port,我們可以用 curl 簡單 try 一下

curl http://localhost:3000

結果

try_server

基礎設定?

我們這裡嘗試設定 port, hostname...etc

Bun.serve({
  port: 8080,
  hostname: "0.0.0.0",
  fetch(req) {
    return new Response("Running on port 8080");
  },
});

這裏我們讓他起在 8080 port

routes 相關使用

Bun.serve({
  routes: {
    "/": () => new Response('首頁!'),
    "/api/users": () => Response.json({ users: [{ id: 1, name: 'testUser01' }, { id: 2, name: 'testUser02' }] }),
    "/api/user/:id": (req) => {
      const { id } = req.params;
      return Response.json({ id, name: `testUser${id}` });
    }
  },
  fetch() {
    return new Response('Not Found(找不到頁面唷)', { status: 404 })
  }
});

跑起來

bun run index.ts

看看結果

day08_routes

處理 post 與 Json body

Bun.serve({
  async fetch(req) {
    if (req.method === 'POST' && (new URL(req.url).pathname === '/api/data')) {
      const body = await req.json();
      return Response.json({ receive: body });
    }
    return new Response('請送 post 請求');
  }
})

這裡我們看看結果

post_result

websocket

這裡最猛的是 bun 內建 websocket 可以使用,不用額外裝 ws 之類的套件
讓我們瞧一瞧怎麼使用

Bun.serve({
  fetch(req, server) {
    if (server.upgrade(req)) {
      return;
    }
    return new Response('我這裡要玩 websocket 你走錯地方了!');
  },
  websocket: {
    open() {
      console.log('好誒連上了!');
    },
    message(ws, message) {
      ws.send(`你收到訊息囉 : ${message}`);
    },
    close() {
      console.log('斷開!!');
    }
  }
})

那我們這裡用 wscat 去測試 websocket

bunx wscat -c ws://localhost:3000

這樣就可以確認我們連上的 websocket 然後開始測試

我們看看結果

websocket 結果

結論

Bun.serve() 這篇走下來,可以感受到 Bun 在「開發體驗」跟「效能」這兩件事上都沒有妥協。
過去我們得靠 Express、Koa 這類框架,

再加上 ws、body-parser 等一堆套件才能拼湊出的功能——路由、JSON 處理、WebSocket——現在 Bun 幾乎是內建就給你了,而且效能還不是同個量級的對手。
從最一開始的一行程式碼啟動伺服器,到後面加上 routes 做出乾淨的路由結構,再到直接處理 POST 的 JSON body,
最後甚至不用額外安裝套件就能玩轉 WebSocket,整個過程幾乎沒有太多「痛點」。對於習慣 Node.js 生態圈的開發者來說,這種「原生內建、開箱即用」的體驗,

會讓人重新思考:也許以後寫後端服務,不一定要先裝一堆 dependencies 才能開始。
當然,這只是 Bun.serve() 的冰山一角,後續還有像是靜態檔案服務、TLS、Cluster 模式等更多進階功能值得挖掘。如果你也是被 Node.js 生態圈的「套件地獄」搞得有點疲乏,不妨找個小專案,實際上手玩玩看 Bun,說不定會有意想不到的驚喜。
我們下一篇見!


上一篇
Bun 的 Bundler:內建打包,in-memory bundling(下篇-特別篇)
下一篇
Bun File I/O:讀寫檔案比 Node.js fs 更直覺
系列文
不只是快 —— Bun 30 天:從底層架構、全套工具鏈到生產部署10
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言