すべての記事
Express.js で PortPreview を使い HTTPS トンネル・Webhook・OAuth を実現
dev stacksExpress.jsNode.jslocal developmentlocalhost tunneling

Express.js アプリで PortPreview を使用する方法

Express.js アプリで PortPreview を使用するには、0.0.0.0 (または localhost のみにバインドしない app.listen(PORT)) でリッスンし、npx portpreview PORT を実行して、Webhook、OAuth コールバック、API デモ用の HTTPS URL を登録します。

エクスプレスをトンネルする理由

Express は、ノード API および BFF のデフォルトの HTTP レイヤーのままです。ミドルウェアの注文と raw-body 解析をローカルでデバッグする際、決済プロバイダー、CRM Webhook、OAuth サーバーにはパブリック HTTPS エンドポイントが必要です。

  • Webhook。 express.json() の前に Webhook パスに express.raw() をマウントします。詳細は Express webhook local testing をご覧ください。
  • OAuth。 リダイレクト URI をトンネル起点に設定します。 OAuth callback testing を参照してください。
  • API の共有。 モバイル チームやフロントエンド チームが VPN なしでローカル API を使用できるようにします。 share local dev server を参照してください。

クイックスタート

<オル>
  • Express を開始します: ポート 3000 で node server.js または npm run dev
  • npx portpreview 3000 を実行します。
  • GET https://your-tunnel.portpreview.dev/health をテストします。
  • プロバイダーの Webhook を POST https://your-tunnel.portpreview.dev/api/webhooks/... に設定します。
  • 最小限の Express サーバー

    import express from 'express';
    
    const app = express();
    const PORT = process.env.PORT ?? 3000;
    
    app.get('/health', (_req, res) => res.json({ ok: true }));
    
    app.listen(PORT, () => {
      console.log(`Listening on http://localhost:${PORT}`);
    });

    Express はデフォルトですべてのインターフェイスをリッスンします。明示的にバインドする場合は、'0.0.0.0' を使用して、トンネル プロセスがトラフィックを転送できるようにします。

    信頼プロキシ ヘッダー

    PortPreview の後ろには、アプリには X-Forwarded-Proto: https が表示されます。絶対 URL またはセキュア Cookie を生成するときに信頼プロキシを有効にします:

    app.set('trust proxy', 1);

    分割フロントエンド用の CORS

    別のポート上の React または Vue 開発サーバーが別のトンネル経由で Express API を呼び出す場合は、CORS を明示的に設定します。

    import cors from 'cors';
    app.use(cors({ origin: process.env.FRONTEND_TUNNEL_URL }));

    セキュリティチェックリスト

    • JSON を解析する前に Webhook 署名を検証します。
    • 認証されていない管理ルートを共有トンネル上に公開しないでください。
    • 終了したらトンネルを停止します。 tunnel security を参照してください。

    Express documentation では、ミドルウェアとルーティングについて説明します。 Start PortPreview free.

    よくある質問

    PortPreview を使用して Express.js 開発サーバーを公開するにはどうすればよいですか?
    ローカルホスト (通常はポート 3000) で Express.js アプリを起動し、別のターミナルで npx portpreview 3000 を実行します。 Webhook、OAuth リダイレクト、共有には HTTPS URL を使用します。
    Express.js を使用して localhost で OAuth コールバックをテストできますか?
    外部プロバイダーにはパブリック HTTPS リダイレクト URI が必要です。開発中に http://localhost の代わりに PortPreview トンネル URL をコールバックとして登録します。
    Express.js トンネリングで最もよくある間違いは何ですか?
    Webhook ルートの前に Express.json() をマウントすると、生の本体が消費されます。グローバル JSON ミドルウェアの前に、Webhook パスにのみ Express.raw() を適用します。
    Express.js トンネル URL を共有しても安全ですか?
    トンネル URL を一時的な認証情報のように扱います。信頼できる共同作業者とのみ共有し、完了したら無効にし、認証なしで管理ルートを公開しないでください。 localhost トンネルのセキュリティのベスト プラクティスを参照してください。