1
0
Fork 0
mirror of https://github.com/terribleplan/next.js.git synced 2024-01-19 02:48:18 +00:00
next.js/examples/pass-server-data
Juan Olvera 7e12997af6 Test updater script on examples folder (#5993)
I wrote a [script](https://github.com/j0lv3r4/dependency-version-updater) to update dependencies recursively in `package.json` files, e.g.:

```
$ node index.js --path="./examples" --dependencies="react=^16.7.0,react-dom=^16.7.0"
```

This PR contains the result against the examples folder.
2019-01-05 12:19:27 +01:00
..
data Example: Passing data from server through API (#2594) 2018-02-03 17:11:47 +01:00
operations Example: Passing data from server through API (#2594) 2018-02-03 17:11:47 +01:00
pages Add prettier for examples directory (#5909) 2018-12-17 17:34:32 +01:00
package.json Test updater script on examples folder (#5993) 2019-01-05 12:19:27 +01:00
README.md #4751 - Explicitly mention install when cloning examples (#4758) 2018-07-11 23:56:15 +02:00
server.js Add prettier for examples directory (#5909) 2018-12-17 17:34:32 +01:00

Deploy to now

Pass Server Data Directly to a Next.js Page during SSR

How to use

Using create-next-app

Execute create-next-app with Yarn or npx to bootstrap the example:

npx create-next-app --example pass-server-data pass-server-data-app
# or
yarn create next-app --example pass-server-data pass-server-data-app

Download manually

Download the example:

curl https://codeload.github.com/zeit/next.js/tar.gz/master | tar -xz --strip=2 next.js-master/examples/pass-server-data
cd pass-server-data

Install it and run:

npm install
npm run dev
# or
yarn
yarn dev

Deploy it to the cloud with now (download)

now

The idea behind the example

If you already have a custom server which has local data (for instance cached data from an API call, or data read from a file at startup) that you wish to make available in the Next.js page, you can pass that data in the query parameter of nextApp.render().

This is not the only way to pass data. You could also expose an endpoint and make a fetch() call to localhost, or you could import server-side code with eval (necessary to prevent webpack from trying to package your server code). However both solutions leave something to be desired in either performance or elegance.

This example shows the express server at server.js reading in a file at load time with static data (this could also have been data cached from an API call) in operations/get-item.js. It has two routes: a home page, and an item page. The item page uses data from the get-item operation, passed as a query parameter in routes/item.js.

We use this data in pages/item.js if rendered server-side, or make a fetch request if rendered client-side. The server knows whether or not to use next.js to render the route based on the Accept header, which will be application/json when we fetch client-side.

Take a look at the following files:

  • server.js
  • routes/item.js
  • pages/item.js
  • operations/get-item.js