{"id":14989320,"url":"https://github.com/idea2app/next-ssr-middleware","last_synced_at":"2025-04-12T01:21:28.176Z","repository":{"id":186833234,"uuid":"675859806","full_name":"idea2app/Next-SSR-middleware","owner":"idea2app","description":"Koa-like middlewares for Next.js Server Side Rendering","archived":false,"fork":false,"pushed_at":"2025-04-03T19:51:23.000Z","size":158,"stargazers_count":3,"open_issues_count":1,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-03T20:34:12.475Z","etag":null,"topics":["koa","middleware","nextjs","ssr"],"latest_commit_sha":null,"homepage":"https://idea2app.github.io/Next-SSR-middleware/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/idea2app.png","metadata":{"files":{"readme":"ReadMe.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-08-07T22:45:59.000Z","updated_at":"2025-03-17T16:05:02.000Z","dependencies_parsed_at":"2023-08-07T23:22:35.855Z","dependency_job_id":"d1ada7a9-470b-487d-b1ce-5a0b177d77c7","html_url":"https://github.com/idea2app/Next-SSR-middleware","commit_stats":{"total_commits":11,"total_committers":1,"mean_commits":11.0,"dds":0.0,"last_synced_commit":"6fb997f288124882fc406ccd7bcbe17c836c553e"},"previous_names":["idea2app/next-ssr-middleware"],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idea2app%2FNext-SSR-middleware","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idea2app%2FNext-SSR-middleware/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idea2app%2FNext-SSR-middleware/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idea2app%2FNext-SSR-middleware/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/idea2app","download_url":"https://codeload.github.com/idea2app/Next-SSR-middleware/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248501855,"owners_count":21114684,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["koa","middleware","nextjs","ssr"],"created_at":"2024-09-24T14:18:07.821Z","updated_at":"2025-04-12T01:21:28.162Z","avatar_url":"https://github.com/idea2app.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Next SSR middleware\n\n[Koa][1]-like middlewares for [Next.js][2] **Server Side Rendering**\n\n[![NPM Dependency](https://img.shields.io/librariesio/github/idea2app/Next-SSR-middleware.svg)][3]\n[![CI \u0026 CD](https://github.com/idea2app/Next-SSR-middleware/actions/workflows/main.yml/badge.svg)][4]\n\n[![NPM](https://nodei.co/npm/next-ssr-middleware.png?downloads=true\u0026downloadRank=true\u0026stars=true)][5]\n\n## Versions\n\n|    SemVer    |    status    |  Next.js  |    MobX     | [MobX i18n][6] |\n| :----------: | :----------: | :-------: | :---------: | :------------: |\n|   `\u003e=0.9`    | ✅developing |  `\u003e=15`   |  `\u003e=6.11`   |    `\u003e=0.5`     |\n| `\u003e=0.7 \u003c0.9` | ❌deprecated | `\u003e=9 \u003c15` |  `\u003e=6.11`   |    `\u003e=0.5`     |\n|    `\u003c0.7`    | ❌deprecated | `\u003e=9 \u003c15` | `\u003e=4 \u003c6.11` |     `\u003c0.5`     |\n\n## Middlewares\n\n1. Router\n2. Error logger\n3. JWT verifier\n4. Props cache\n5. i18n loader\n6. OAuth 2 signer (with common providers)\n    1. GitHub\n\n## Usage\n\n### Page router\n\n#### `pages/user/[id].tsx`\n\n```tsx\nimport {\n    JWTProps,\n    RouterProps,\n    jwtVerifier,\n    cache,\n    errorLogger,\n    router,\n    translator\n} from 'next-ssr-middleware';\n\nimport i18n from '../../model/Translation';\nimport { User, UserModel } from '../../model/User';\n\ntype UserDetailPageProps = User \u0026 JWTProps \u0026 RouterProps;\n\nexport const getServerSideProps = compose\u003c{ id: string }, UserDetailPageProps\u003e(\n    jwtVerifier(), // set `JWT_SECRET` in `.env.local` first\n    cache(),\n    errorLogger,\n    router,\n    translator(i18n),\n    async ({ params }) =\u003e {\n        const props = await new UserModel().getOne(params!.id);\n\n        return { notFound: !props, props };\n    }\n);\n\nexport default function UserDetailPage({\n    jwtPayload,\n    route,\n    name,\n    summary\n}: UserDetailPageProps) {\n    return (\n        \u003c\u003e\n            \u003ch1\u003e\n                {name} - {route.params!.id}\n            \u003c/h1\u003e\n            \u003cp\u003e{summary}\u003c/p\u003e\n        \u003c/\u003e\n    );\n}\n```\n\n### App router\n\n#### `middleware.ts`\n\n```ts\nimport { NextRequest, NextResponse } from 'next/server';\nimport { parseHeaders } from 'next-ssr-middleware';\n\nexport const config = {\n    // Matcher ignoring `/_next/`, `/api/` \u0026 icons\n    matcher: [\n        '/((?!api|_next/static|_next/image|favicon.ico|apple-icon|icon).*)'\n    ]\n};\nexport const middleware = ({ headers }: NextRequest) =\u003e\n    NextResponse.next({ headers: parseHeaders(headers) });\n```\n\n#### `app/page.tsx`\n\n```tsx\nimport { compose, withMiddleware, ServerProps } from 'next-ssr-middleware';\n\nconst getServerSideProps = compose(async () =\u003e {\n    const props = await (\n        await fetch('https://api.github.com/orgs/idea2app')\n    ).json();\n\n    return { props };\n});\n\nconst HomePage = withMiddleware(getServerSideProps, Home);\n\nexport default HomePage;\n\nasync function Home({ params, searchParams, ...props }: ServerProps) {\n    return (\n        \u003c\u003e\n            \u003ch1\u003eHome\u003c/h1\u003e\n            \u003cpre\u003e{JSON.stringify(props, null, 4)}\u003c/pre\u003e\n        \u003c/\u003e\n    );\n}\n```\n\n## Cases\n\n1. https://github.com/idea2app/Next-Bootstrap-ts\n2. https://github.com/kaiyuanshe/kaiyuanshe.github.io\n3. https://github.com/kaiyuanshe/OpenHackathon-Web\n4. https://github.com/kaiyuanshe/OSS-toolbox\n\n[1]: https://koajs.com/\n[2]: https://nextjs.org/\n[3]: https://libraries.io/npm/next-ssr-middleware\n[4]: https://github.com/idea2app/Next-SSR-middleware/actions/workflows/main.yml\n[5]: https://nodei.co/npm/next-ssr-middleware/\n[6]: https://github.com/idea2app/MobX-i18n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fidea2app%2Fnext-ssr-middleware","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fidea2app%2Fnext-ssr-middleware","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fidea2app%2Fnext-ssr-middleware/lists"}