

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Web 函數範例應用程式
<a name="web-functions-samples"></a>

每個範例都會使用 `index.js`做為項目檔案，並從 監聽主機和連接埠`AWS_LAMBDA_HTTP_ENDPOINT`。使用其生產相依性封裝應用程式，並從版本控制的 Amazon S3 物件部署應用程式。

下表列出每個範例以及您可以從中學習的內容。


| 樣本 | 使用它來學習 | 
| --- | --- | 
| [最少Express的應用程式](#web-functions-samples-express) | 使用 啟動 HTTP 伺服器Express。 | 
| [Hono API 和靜態檔案](#web-functions-samples-hono) | 使用 提供 API 路由和靜態檔案Hono。 | 
| [伺服器傳送事件](#web-functions-samples-streaming) | 串流伺服器傳送的事件，並在用戶端中斷連線時停止運作。 | 
| [多區域驗證路由](#web-functions-samples-region) | 驗證多區域路由時傳回服務區域。 | 

## 最少Express的應用程式
<a name="web-functions-samples-express"></a>

此架構型範例是 所建立零相依性啟動器的替代方案`--hello-world`。如需入門部署，請參閱 [部署和測試您的 Web 函數](web-functions-create.md#web-functions-create-cli-deploy)。

安裝 Express：

```
npm init -y
npm install express
```

建立 `index.js`：

```
const express = require('express');
const app = express();
const [host, port] = (process.env.AWS_LAMBDA_HTTP_ENDPOINT || 'localhost:3000').split(':');

app.get('/', (request, response) => {
  response.send('Hello from Lambda Web Functions!');
});

app.listen(port, host);
```

如需封裝指引，請參閱 [封裝和部署範例](#web-functions-samples-deploy)。

## Hono API 和靜態檔案
<a name="web-functions-samples-hono"></a>

安裝相依項：

```
npm init -y
npm pkg set type=module
npm install hono @hono/node-server
```

建立 `index.js`：

```
import { serve } from '@hono/node-server';
import { serveStatic } from '@hono/node-server/serve-static';
import { Hono } from 'hono';
import { secureHeaders } from 'hono/secure-headers';

const app = new Hono();
app.use(secureHeaders());
app.use('/static/*', serveStatic({ root: './' }));
app.get('/api/health', (context) => context.json({ status: 'ok' }));
app.notFound((context) => context.json({ error: 'not found' }, 404));

const [host, port] = (process.env.AWS_LAMBDA_HTTP_ENDPOINT || 'localhost:3000').split(':');

serve({ fetch: app.fetch, port: Number(port), hostname: host });
```

在 `static`目錄下放置靜態檔案，並在部署套件中包含 目錄。

## 伺服器傳送事件
<a name="web-functions-samples-streaming"></a>

將下列路由新增至Express應用程式：

```
app.get('/events', (request, response) => {
  response.setHeader('Content-Type', 'text/event-stream');
  response.setHeader('Cache-Control', 'no-cache');
  response.flushHeaders();

  const interval = setInterval(() => {
    response.write(`data: ${JSON.stringify({ time: Date.now() })}\n\n`);
  }, 1000);

  response.on('close', () => {
    clearInterval(interval);
  });
});
```

請求會保持作用中狀態，直到應用程式結束回應或用戶端中斷連線為止。設定最大串流持續時間的修訂逾時。不支援 WebSocket 升級。

## 多區域驗證路由
<a name="web-functions-samples-region"></a>

新增路由，以傳回執行請求的區域：

```
app.get('/region', (request, response) => {
  response.json({
    region: process.env.AWS_REGION,
    requestId: request.get('lambda-web-request-id')
  });
});
```

從對您應用程式很重要的用戶端位置呼叫路由。對於`MultiRegion`端點，選取的區域來自以延遲為基礎的路由，並且可能會變更。請勿將執行環境用作工作階段存放區。

## 封裝和部署範例
<a name="web-functions-samples-deploy"></a>

```
npm ci --omit=dev
zip -r function.zip index.js package.json package-lock.json node_modules
aws s3 cp function.zip s3://{{amzn-s3-demo-bucket}}/samples/function.zip
```

包含所選範例使用的其他檔案，例如Hono範例中的 `static`目錄。若要建立參考上傳物件的修訂，請參閱 [從 Amazon S3 部署 Web 函數程式碼](web-functions-code-s3.md)和 [管理 Web 函數修訂](web-functions-revisions.md)。如需更高階的`deploy`工作流程，請參閱 [建立 Web 函數 (AWS CLI)](web-functions-create.md#web-functions-create-cli)。在修訂版為 `Active` 且端點提供它之後，將請求傳送到端點網域，以確認範例回應。如需此煙霧測試以外的測試涵蓋範圍，請參閱[測試 Lambda Web 函數](web-functions-testing.md)。