├── .gitignore
├── next-env.d.ts
├── package-lock.json
├── package.json
├── server
└── index.ts
├── src
└── pages
│ ├── _error.tsx
│ └── index.tsx
├── tsconfig.json
└── tsconfig.server.json
/.gitignore:
--------------------------------------------------------------------------------
1 | .next
2 | dist
3 | node_modules/
4 |
--------------------------------------------------------------------------------
/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "next-express-typescript-2",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "dev": "ts-node --project tsconfig.server.json server/index.ts",
8 | "build:server": "tsc --project tsconfig.server.json",
9 | "build:next": "next build",
10 | "build": "npm run build:next && npm run build:server",
11 | "start": "NODE_ENV=production node dist/index.js"
12 | },
13 | "keywords": [],
14 | "author": "",
15 | "license": "ISC",
16 | "dependencies": {
17 | "express": "^4.17.1",
18 | "next": "^9.2.1",
19 | "react": "^16.12.0",
20 | "react-dom": "^16.12.0"
21 | },
22 | "devDependencies": {
23 | "@types/express": "^4.17.2",
24 | "@types/node": "^13.7.1",
25 | "@types/react": "^16.9.19",
26 | "ts-node": "^8.6.2",
27 | "typescript": "^3.7.5"
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/server/index.ts:
--------------------------------------------------------------------------------
1 | import express, { Request, Response } from "express";
2 | import next from "next";
3 |
4 | const dev = process.env.NODE_ENV !== "production";
5 | const app = next({ dev });
6 | const handle = app.getRequestHandler();
7 | const port = process.env.PORT || 3000;
8 |
9 | (async () => {
10 | try {
11 | await app.prepare();
12 | const server = express();
13 | server.all("*", (req: Request, res: Response) => {
14 | return handle(req, res);
15 | });
16 | server.listen(port, (err?: any) => {
17 | if (err) throw err;
18 | console.log(`> Ready on localhost:${port} - env ${process.env.NODE_ENV}`);
19 | });
20 | } catch (e) {
21 | console.error(e);
22 | process.exit(1);
23 | }
24 | })();
25 |
--------------------------------------------------------------------------------
/src/pages/_error.tsx:
--------------------------------------------------------------------------------
1 | import { NextPageContext } from "next";
2 |
3 | const Error = ({ statusCode }) => {
4 | return (
5 |
6 | {statusCode
7 | ? `An error ${statusCode} occurred on server`
8 | : "An error occurred on client"}
9 |
10 | );
11 | };
12 |
13 | Error.getInitialProps = ({ res, err }: NextPageContext) => {
14 | const statusCode = res ? res.statusCode : err ? err.statusCode : 404;
15 | return { statusCode };
16 | };
17 |
18 | export default Error;
19 |
--------------------------------------------------------------------------------
/src/pages/index.tsx:
--------------------------------------------------------------------------------
1 | function IndexPage() {
2 | return Hello World Next - Typescript - Express
;
3 | }
4 |
5 | export default IndexPage;
6 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": [
5 | "dom",
6 | "dom.iterable",
7 | "esnext"
8 | ],
9 | "allowJs": true,
10 | "skipLibCheck": true,
11 | "strict": false,
12 | "forceConsistentCasingInFileNames": true,
13 | "noEmit": true,
14 | "esModuleInterop": true,
15 | "module": "esnext",
16 | "moduleResolution": "node",
17 | "resolveJsonModule": true,
18 | "isolatedModules": true,
19 | "jsx": "preserve"
20 | },
21 | "exclude": [
22 | "node_modules"
23 | ],
24 | "include": [
25 | "next-env.d.ts",
26 | "**/*.ts",
27 | "**/*.tsx"
28 | ]
29 | }
30 |
--------------------------------------------------------------------------------
/tsconfig.server.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "module": "commonjs",
5 | "outDir": "dist",
6 | "noEmit": false
7 | },
8 | "include": ["server"]
9 | }
10 |
--------------------------------------------------------------------------------