README.md 2.0 KB
Newer Older
D
Dan Zajdband 已提交
1 2
# Custom Express Server example

3
Most of the times the default Next server will be enough but sometimes you want to run your own server to customize routes or other kind of the app behavior. Next provides a [Custom server and routing](https://github.com/vercel/next.js#custom-server-and-routing) so you can customize as much as you want.
4 5 6 7 8

Because the Next.js server is just a node.js module you can combine it with any other part of the node.js ecosystem. in this case we are using express to build a custom router on top of Next.

The example shows a server that serves the component living in `pages/a.js` when the route `/b` is requested and `pages/b.js` when the route `/a` is accessed. This is obviously a non-standard routing strategy. You can see how this custom routing is being made inside `server.js`.

D
Dan Zajdband 已提交
9 10
## How to use

11 12
### Using `create-next-app`

13
Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app) with [npm](https://docs.npmjs.com/cli/init) or [Yarn](https://yarnpkg.com/lang/en/docs/cli/create/) to bootstrap the example:
14

15
```bash
16
npx create-next-app --example custom-server-express custom-server-express-app
17 18
# or
yarn create next-app --example custom-server-express custom-server-express-app
19 20 21 22
```

### Download manually

23
Download the example:
D
Dan Zajdband 已提交
24 25

```bash
26
curl https://codeload.github.com/vercel/next.js/tar.gz/canary | tar -xz --strip=2 next.js-canary/examples/custom-server-express
N
nkzawa 已提交
27
cd custom-server-express
D
Dan Zajdband 已提交
28 29
```

D
Dan Zajdband 已提交
30
Install it and run:
D
Dan Zajdband 已提交
31 32 33

```bash
npm install
N
nkzawa 已提交
34
npm run dev
35 36 37
# or
yarn
yarn dev
D
Dan Zajdband 已提交
38
```
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

### Populate body property

Without the use of the body-parser package `req.body` will return undefined. To get express to populate `req.body` you need to install the body parser package and call the package within server.js.

Install the package:

```bash
npm install body-parser
```

Use the package within server.js:

```bash
const bodyParser = require('body-parser');

app.prepare().then(() => {
  const server = express();
  server.use(bodyParser.urlencoded({ extended: true }))
  server.use(bodyParser.json())
})
```