refactor: serve static Next.js files instead of SSR
This commit is contained in:
49
server.ts
49
server.ts
@ -140,46 +140,19 @@ serve({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Next.jsのSSRを処理
|
// Next.jsの静的ファイルを提供するディレクトリのパスを指定
|
||||||
|
const indexPath = path.join(frontendBuildDir, "server", "pages", "index.html");
|
||||||
|
|
||||||
|
// 通常のリクエストは静的ファイルで処理
|
||||||
try {
|
try {
|
||||||
// Next.jsのページレンダリング
|
const file = Bun.file(indexPath);
|
||||||
const app = require("./frontend/src/app");
|
if (await file.exists()) {
|
||||||
|
return new Response(file, {
|
||||||
// ページコンポーネントを取得
|
headers: { "Content-Type": "text/html; charset=utf-8" }
|
||||||
const pageComponent = app.default || app.Home || app;
|
});
|
||||||
|
}
|
||||||
// React要素を作成
|
|
||||||
const element = React.createElement(pageComponent);
|
|
||||||
|
|
||||||
// React DOMを使用してHTMLを生成
|
|
||||||
const ReactDOMServer = require("react-dom/server");
|
|
||||||
const html = ReactDOMServer.renderToString(element);
|
|
||||||
|
|
||||||
// 完全なHTMLドキュメントを構築
|
|
||||||
const htmlTemplate = `
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>ポッドキャスト管理画面</title>
|
|
||||||
<script src="/_next/static/runtime/webpack.js"></script>
|
|
||||||
<script src="/_next/static/runtime/main.js"></script>
|
|
||||||
<script src="/_next/static/runtime/React.js"></script>
|
|
||||||
<script src="/_next/static/runtime/ReactDOM.js"></script>
|
|
||||||
<link rel="stylesheet" href="/_next/static/css/app.css" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="root">${html}</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
`.trim();
|
|
||||||
|
|
||||||
return new Response(htmlTemplate, {
|
|
||||||
headers: { "Content-Type": "text/html; charset=utf-8" }
|
|
||||||
});
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error("Error rendering Next.js app:", e);
|
console.error("Error serving index.html:", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Response("Not Found", { status: 404 });
|
return new Response("Not Found", { status: 404 });
|
||||||
|
Reference in New Issue
Block a user