從 Express.js 移轉至 Azure Functions
Express.js 是 Web 開發人員最熱門的Node.js 架構之一,而且是建置提供 API 端點的應用程式的絕佳選擇。
將程式碼移轉至無伺服器架構時,重構 Express.js 端點會影響下列區域:
中介軟體:Express.js 具有強固的中介軟體集合。 在 Azure Functions 和 Azure API 管理功能中,不再需要許多中介軟體模組。 在移轉端點之前,請確保您可以複寫或取代基本中介軟體所處理的任何邏輯。
不同的 API:用來處理要求和回應的 API 在 Azure Functions 和 Express.js 之間有所不同。 下列範例詳細說明必要的變更。
預設路由:依預設,Azure Functions 端點會在
api
路由下公開。 路由規則可透過在 host.json 檔案中的routePrefix
設定。組態和慣例:Functions 應用程式會使用 function.json 檔案來定義 HTTP 動詞、定義安全性原則,以及設定函式的輸入和輸出。 依預設,包含函式檔案的資料夾名稱會定義端點名稱,但您可以透過 function.json 檔案中的
route
屬性來變更名稱。
提示
若要深入了解,請參閱使用 Azure Functions 將 Node.js 和 Express API 重構為無伺服器 API 互動式教學課程。
範例
Express.js
下列範例顯示典型的 Express.js GET
端點。
// server.js
app.get('/hello', (req, res) => {
try {
res.send("Success!");
} catch(error) {
const err = JSON.stringify(error);
res.status(500).send(`Request error. ${err}`);
}
});
當 GET
要求傳送至 /hello
時,會傳回包含 Success
的 HTTP 200
回應。 如果端點遇到錯誤,回應會是 HTTP 500
並具有錯誤詳細資料。
Azure Functions
Azure Functions 會將組態和程式碼檔案組織成每個函式單一資料夾。 依預設,資料夾的名稱會指出函式名稱。
例如,名為 hello
的函式有具有下列檔案的資料夾。
| - hello
| - function.json
| - index.js
下列範例會實作與上述 Express.js 端點相同的結果,但使用 Azure Functions。
// hello/index.js
module.exports = async function (context, req) {
try {
context.res = { body: "Success!" };
} catch(error) {
const err = JSON.stringify(error);
context.res = {
status: 500,
body: `Request error. ${err}`
};
}
};
移至 Functions 時,會進行下列變更:
模組:函式程式碼會實作為 JavaScript 模組。
內容和回應物件:
context
可讓您與 Functions 的執行階段通訊。 您可以從內容讀取要求資料,並設定函式的回應。 同步程式碼會要求您呼叫 1.xcontext.done()
來完成執行,而 2.x+async
函式則會隱含地解析要求。命名慣例:用來包含 Azure Functions 檔案的資料夾名稱預設會作為端點名稱 (您可以在 function.json 中覆寫此名稱)。
組態:您可以在 function.json 檔案中定義 HTTP 動詞命令,例如
POST
或PUT
。
下列 function.json 檔案會保存函式的組態資訊。
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": ["get"]
},
{
"type": "http",
"direction": "out",
"name": "res"
}
]
}
藉由在 methods
陣列中定義 get
,函式就可供 HTTP GET
要求使用。 如果您想要讓 API 接受支援 POST
要求,也可以將 post
新增至陣列。
下一步
- 若要深入了解,請參閱使用 Azure Functions 將 Node.js 和 Express API 重構為無伺服器 API 互動式教學課程