Next.js - Guia rápido
O Next.js é uma estrutura baseada em React com capacidade de renderização do lado do servidor. É muito rápido e otimizado para SEO.
Usando Next.js, você pode criar aplicativos baseados em reações robustas com bastante facilidade e testá-los. A seguir estão os principais recursos do Next.js.
Hot Code Reload - O servidor Next.js detecta arquivos modificados e os recarrega automaticamente.
Automatic Routing- Não há necessidade de configurar qualquer url para roteamento. os arquivos devem ser colocados na pasta de páginas. Todos os urls serão mapeados para o sistema de arquivos. A personalização pode ser feita.
Component specific styles - styled-jsx fornece suporte para estilos globais e também para estilos específicos de componentes.
Server side rendering - os componentes react são pré-renderizados no servidor, portanto carregam mais rápido no cliente.
Node Ecosystem - Next.js sendo géis baseados em reação bem com o ecossistema Node.
Automatic code split- Next.js renderiza páginas com as bibliotecas de que precisam. Next.js em vez de criar um único arquivo javascript grande, cria múltiplos recursos. Quando uma página é carregada, apenas a página javascript necessária é carregada com ela.
Prefetch - Next.js fornece o componente Link que é usado para vincular vários componentes e oferece suporte a uma propriedade de pré-busca para pré-buscar recursos da página em segundo plano.
Dynamic Components - Next.js permite importar módulos JavaScript e componentes React dinamicamente.
Export Static Site - Next.js permite exportar site estático completo de seu aplicativo da web.
Built-in Typescript Support - Next.js é escrito em Typescripts e fornece excelente suporte para Typescript.
Como Next.js é uma estrutura baseada em reação, estamos usando o ambiente Node. Agora certifique-se de terNode.js e npminstalado em seu sistema. Você pode usar o seguinte comando para instalar Next.js -
npm install next react react-dom
Você pode observar a seguinte saída assim que Next.js for instalado com sucesso -
+ [email protected]
+ [email protected]
+ [email protected]
added 831 packages from 323 contributors and audited 834 packages in 172.989s
Agora, vamos criar um nó package.json -
npm init
Selecione os valores padrão ao criar um package.json -
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.
See `npm help json` for definitive documentation on these fields
and exactly what they do.
Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.
Press ^C at any time to quit.
package name: (nextjs)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to \Node\nextjs\package.json:
{
"name": "nextjs",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"next": "^9.4.4",
"react": "^16.13.1",
"react-dom": "^16.13.1"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
Is this OK? (yes)
Agora atualize a seção de scripts de package.json para incluir comandos Next.js.
{
"name": "nextjs",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"next": "^9.4.4",
"react": "^16.13.1",
"react-dom": "^16.13.1"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "next",
"build": "next build",
"start": "next start"
},
"author": "",
"license": "ISC"
}
Crie um diretório de páginas.
Crie uma pasta de páginas dentro da pasta nextjs e crie um arquivo index.js com o seguinte conteúdo.
function HomePage() {
return <div>Welcome to Next.js!</div>
}
export default HomePage
Inicie o servidor Next.js
Execute o seguinte comando para iniciar o servidor -.
npm run dev
> [email protected] dev \Node\nextjs
> next
ready - started server on http://localhost:3000
event - compiled successfully
event - build page: /
wait - compiling...
event - compiled successfully
event - build page: /next/dist/pages/_error
wait - compiling...
event - compiled successfully
Verificar saída
Abra localhost: 3000 em um navegador e você verá a seguinte saída.
Em Next.js, podemos criar páginas e navegar entre elas usando o recurso de roteamento do sistema de arquivos. Vamos usarLink componente para ter uma navegação do lado do cliente entre as páginas.
Em Next.js, uma página é um componente React e é exportada do diretório de páginas. Cada página está associada a uma rota com base em seu nome de arquivo. Por exemplo
pages/index.js está vinculado à rota '/'.
pages/posts/first.js está ligado à rota '/ posts / first' e assim por diante.
Vamos atualizar o projeto nextjs criado no capítulo Configuração do Ambiente .
Crie um diretório de postagem e first.js dentro dele com o seguinte conteúdo.
export default function FirstPost() {
return <h1>My First Post</h1>
}
Adicione Link Support para voltar à página inicial. Atualize first.js da seguinte maneira -
import Link from 'next/link'
export default function FirstPost() {
return (
<>
<h1>My First Post</h1>
<h2>
<Link href="/">
<a>Home</a>
</Link>
</h2>
</>
)
}
Adicione Link Support à página inicial para navegar até a primeira página. Atualize index.js da seguinte forma -
import Link from 'next/link'
function HomePage() {
return (
<>
<div>Welcome to Next.js!</div>
<Link href="/posts/first"><a>First Post</a></Link>
</>
)
}
export default HomePage
Inicie o servidor Next.js
Execute o seguinte comando para iniciar o servidor -.
npm run dev
> [email protected] dev \Node\nextjs
> next
ready - started server on http://localhost:3000
event - compiled successfully
event - build page: /
wait - compiling...
event - compiled successfully
event - build page: /next/dist/pages/_error
wait - compiling...
event - compiled successfully
Verificar saída
Abra localhost: 3000 em um navegador e você verá a seguinte saída.
Clique no primeiro link e você verá a seguinte saída.
Em Next.js, podemos servir páginas estáticas como imagens muito facilmente, colocando-as em public, um diretório de nível superior. Podemos consultar esses arquivos de maneira semelhante, como páginas empages diretório.
Em Next.js, uma página é um componente React e é exportada do diretório de páginas. Cada página está associada a uma rota com base em seu nome de arquivo.
Vamos atualizar o projeto nextjs usado no capítulo Pages .
Crie um diretório público e coloque quaisquer imagens dentro dele. Pegamos logo.png, imagem do logotipo do TutorialsPoint.
Atualize first.js da seguinte maneira -
import Link from 'next/link'
export default function FirstPost() {
return (
<>
<h1>My First Post</h1>
<h2>
<Link href="/">
<a>Home</a>
</Link>
</h2>
<br/">
<img src="/logo.png" alt="TutorialsPoint Logo" />
</>
)
}
Aqui, adicionamos uma referência a logo.png no arquivo index.js.
Inicie o servidor Next.js
Execute o seguinte comando para iniciar o servidor -.
npm run dev
> [email protected] dev \Node\nextjs
> next
ready - started server on http://localhost:3000
event - compiled successfully
event - build page: /
wait - compiling...
event - compiled successfully
event - build page: /next/dist/pages/_error
wait - compiling...
event - compiled successfully
Verificar saída
Abra localhost: 3000 em um navegador e você verá a seguinte saída.
O diretório público também é útil no caso de propósito de SEO. Ele pode ser usado para o robots.txt, verificação do Google Site ou qualquer outro ativo estático no aplicativo da web.
Em Next.js, podemos modificar a seção principal de cada página de reação muito facilmente com a ajuda de <Head> componente de reação que está embutido.
Vamos atualizar o projeto nextjs usado no capítulo Pages .
Atualize index.js da seguinte forma -
import Link from 'next/link'
import Head from 'next/head'
function HomePage() {
return (
<>
<Head>
<title>Welcome to Next.js!</title>
</Head>
<div>Welcome to Next.js!</div>
<Link href="/posts/first"><a>First Post</a></Link>
<br/>
<img src="/logo.png" alt="TutorialsPoint Logo" />
</>
)
}
export default HomePage
Atualize first.js da seguinte maneira -
import Link from 'next/link'
import Head from 'next/head'
export default function FirstPost() {
return (
<>
<Head>
<title>My First Post</title>
</Head>
<h1>My First Post</h1>
<h2>
<Link href="/">
<a>Home</a>
</Link>
</h2>
</>
)
}
Aqui, adicionamos uma referência a logo.png no arquivo index.js.
Inicie o servidor Next.js
Execute o seguinte comando para iniciar o servidor -.
npm run dev
> [email protected] dev \Node\nextjs
> next
ready - started server on http://localhost:3000
event - compiled successfully
event - build page: /
wait - compiling...
event - compiled successfully
event - build page: /next/dist/pages/_error
wait - compiling...
event - compiled successfully
Verificar saída
Abra localhost: 3000 em um navegador e você verá a seguinte saída.
Clique no link Primeira página e verifique se o título mudou na página Primeira postagem também.
Em Next.js, podemos usar a biblioteca css-in-js embutida chamada styled-jsx. Ele permite escrever css dentro de um componente react e esses estilos terão como escopo o componente.
Neste exemplo, criaremos um objeto Container que será usado para estilizar outros componentes, contendo-os.
Vamos atualizar o projeto nextjs usado no capítulo Meta Dados .
Primeiro crie um diretório de componentes no nível raiz e adicione um arquivo container.module.css da seguinte maneira -
.container {
max-width: 36rem;
padding: 0 1rem;
margin: 3rem auto 6rem;
border: 1px solid red;
}
Crie o arquivo container.js no diretório Componentes
import styles from './container.module.css'
function Container({ children }) {
return <div className={styles.container}>{children}</div>
}
export default Container
Agora use o componente Container em first.js.
import Link from 'next/link'
import Head from 'next/head'
import Container from '../../components/container'
export default function FirstPost() {
return (
<>
<Container>
<Head>
<title>My First Post</title>
</Head>
<h1>My First Post</h1>
<h2>
<Link href="/">
<a>Home</a>
</Link>
</h2>
</Container>
</>
)
}
Inicie o servidor Next.js
Execute o seguinte comando para iniciar o servidor -.
npm run dev
> [email protected] dev \Node\nextjs
> next
ready - started server on http://localhost:3000
event - compiled successfully
event - build page: /
wait - compiling...
event - compiled successfully
event - build page: /next/dist/pages/_error
wait - compiling...
event - compiled successfully
Verificar saída
Abra localhost: 3000 em um navegador e vá para a primeira postagem, você verá a seguinte saída.
Em Next.js, vamos criar estilos globais que serão aplicados em todas as páginas.
Neste exemplo, criaremos um styles.css que será usado em todos os componentes usando o componente _app.js.
Vamos atualizar o projeto nextjs usado no capítulo Suporte CSS .
Primeiro crie um diretório de estilos no nível raiz e adicione um arquivo styles.css da seguinte maneira -
html,
body {
padding: 0;
margin: 0;
line-height: 1.6;
font-size: 18px;
background-color: lime;
}
* {
box-sizing: border-box;
}
a {
color: #0070f3;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
img {
max-width: 100%;
display: block;
}
Criar arquivo _app.js no diretório de páginas
import '../styles/styles.css'
export default function App({ Component, pageProps }) {
return <Component {...pageProps} />
}
Inicie o servidor Next.js
Execute o seguinte comando para iniciar o servidor -.
npm run dev
> [email protected] dev \Node\nextjs
> next
ready - started server on http://localhost:3000
event - compiled successfully
event - build page: /
wait - compiling...
event - compiled successfully
event - build page: /next/dist/pages/_error
wait - compiling...
event - compiled successfully
Verificar saída
Abra localhost: 3000 em um navegador e você verá a seguinte saída.
Clique no link da primeira postagem.
Em Next.js, sabemos que ele gera HTML para uma página chamada pré-renderização. Next.JS suporta dois tipos de pré-renderização.
Static Generation- Este método gera a página HTML no momento da construção. Este HTML pré-renderizado é enviado em cada solicitação. Este método é útil para sites de marketing, blogs, sites de listagem de produtos de comércio eletrônico, ajuda, sites de documentação.
Server Side Generation- Este método gera a página HTML em cada solicitação. Este método é adequado quando o conteúdo de uma página html pode variar com cada solicitação.
Pré-renderização por página
Next.JS permite definir o método de pré-renderização para cada página onde a maioria das páginas segue a geração estática e outras páginas usarão a renderização do lado do servidor.
Geração estática sem dados
A geração estática pode ser feita sem dados. Nesse caso, as páginas HTML estarão prontas sem a necessidade de pré-buscar os dados e, em seguida, iniciar a renderização. Os dados podem ser obtidos posteriormente ou mediante solicitação. Essa técnica ajuda a mostrar ao usuário uma interface de usuário sem quaisquer dados, caso os dados demorem para chegar.
Geração estática com dados
A geração estática pode ser feita com dados. Nesse caso, as páginas HTML não estarão prontas até que os dados sejam buscados, pois o HTML pode depender dos dados. Cada componente tem um método especialgetStaticProps que pode ser usado para buscar dados e passar dados como adereços da página para que a página possa renderizar de acordo com os adereços passados.
A função getStaticProps () é executada no momento da construção na produção e é executada para cada solicitação no modo de desenvolvimento.
Vamos criar um exemplo para demonstrar o mesmo.
Neste exemplo, criaremos uma página de atualização index.js e first.js para fazer um acerto no servidor para obter dados.
Vamos atualizar o projeto nextjs usado no capítulo Suporte Global de CSS .
Atualize o arquivo index.js no diretório de páginas para usar o método getServerSideProps (). Este método será chamado por solicitação.
import Link from 'next/link'
import Head from 'next/head'
function HomePage(props) {
return (
<>
<Head>
<title>Welcome to Next.js!</title>
</Head>
<div>Welcome to Next.js!</div>
<Link href="/posts/first"><a>First Post</a></Link>
<br/>
<div>Next stars: {props.stars}</div>
<img src="/logo.png" alt="TutorialsPoint Logo" />
</>
)
}
export async function getServerSideProps(context) {
const res = await fetch('https://api.github.com/repos/vercel/next.js')
const json = await res.json()
return {
props: { stars: json.stargazers_count }
}
}
export default HomePage
Atualize o arquivo first.js no diretório de páginas para usar o método getStaticProps (). Este método será chamado uma vez.
import Link from 'next/link'
import Head from 'next/head'
import Container from '../../components/container'
export default function FirstPost(props) {
return (
<>
<Container>
<Head>
<title>My First Post</title>
</Head>
<h1>My First Post</h1>
<h2>
<Link href="/">
<a>Home</a>
</Link>
<div>Next stars: {props.stars}</div>
</h2>
</Container>
</>
)
}
export async function getStaticProps() {
const res = await fetch('https://api.github.com/repos/vercel/next.js')
const json = await res.json()
return {
props: { stars: json.stargazers_count }
}
}
Inicie o servidor Next.js
Execute o seguinte comando para iniciar o servidor -.
npm run dev
> [email protected] dev \Node\nextjs
> next
ready - started server on http://localhost:3000
event - compiled successfully
event - build page: /
wait - compiling...
event - compiled successfully
event - build page: /next/dist/pages/_error
wait - compiling...
event - compiled successfully
Verificar saída
Abra localhost: 3000 em um navegador e você verá a seguinte saída.
Clique no link da primeira postagem.
Next.js usa um roteador baseado em sistema de arquivos. Sempre que adicionamos qualquer página apagesdiretório, ele está automaticamente disponível via url. A seguir estão as regras deste roteador.
Index Routes- Um arquivo index.js presente em uma pasta mapeia para a raiz do diretório. Por exemplo -
pages / index.js mapeia para '/'.
pages / posts / index.js mapeia para '/ posts'.
Nested Routes- Qualquer estrutura de pasta aninhada no diretório de páginas porque o roteador url automaticamente. Por exemplo -
pages / settings / dashboard / about.js mapeia para '/ settings / dashboard / about'.
pages / posts / first.js mapeia para '/ posts / first'.
Dynamic Routes- Podemos usar o parâmetro nomeado também para corresponder ao url. Use colchetes para o mesmo. Por exemplo -
pages / posts / [id] .js mapeia para '/ posts /: id' onde podemos usar URL como '/ posts / 1'.
pages / [user] /settings.js mapeia para '/ posts /: user / settings' onde podemos usar URL como '/ abc / settings'.
pages / posts / [... all] .js mapeia para '/ posts / *' onde podemos usar qualquer URL como '/ posts / 2020 / jun /'.
Link de página
Next.JS permite vincular páginas no lado do cliente usando o componente Link react. Possui as seguintes propriedades -
href- nome da página no diretório de páginas. Por exemplo/posts/first que se refere a first.js presente no diretório pages / posts.
Vamos criar um exemplo para demonstrar o mesmo.
Neste exemplo, vamos atualizar a página index.js e first.js para fazer um acerto no servidor para obter dados.
Vamos atualizar o projeto nextjs usado no capítulo Suporte Global de CSS .
Atualize o arquivo index.js no diretório de páginas conforme a seguir.
import Link from 'next/link'
import Head from 'next/head'
function HomePage(props) {
return (
<>
<Head>
<title>Welcome to Next.js!</title>
</Head>
<div>Welcome to Next.js!</div>
<Link href="/posts/first">> <a>First Post</a></Link>
<br/>
<div>Next stars: {props.stars}</div>
<img src="/logo.png" alt="TutorialsPoint Logo" />
</>
)
}
export async function getServerSideProps(context) {
const res = await fetch('https://api.github.com/repos/vercel/next.js')
const json = await res.json()
return {
props: { stars: json.stargazers_count }
}
}
export default HomePage
Inicie o servidor Next.js
Execute o seguinte comando para iniciar o servidor -.
npm run dev
> [email protected] dev \Node\nextjs
> next
ready - started server on http://localhost:3000
event - compiled successfully
event - build page: /
wait - compiling...
event - compiled successfully
event - build page: /next/dist/pages/_error
wait - compiling...
event - compiled successfully
Verificar saída
Abra localhost: 3000 em um navegador e você verá a seguinte saída.
Clique no link da primeira postagem.
Em Next.js, podemos criar rotas dinamicamente. Neste exemplo, criaremos páginas dinamicamente e seu roteamento.
Step 1. Define [id].js file- [id] .js representa a página dinâmica onde id será o caminho relativo. Defina este arquivo no diretório pages / post.
Step 2. Define lib/posts.js- posts.js representa os ids e conteúdos. O diretório lib deve ser criado no diretório raiz.
[id] .js
Atualize o arquivo [id] .js com o método getStaticPaths () que define os caminhos e o método getStaticProps () para obter o conteúdo com base no id.
import Link from 'next/link'
import Head from 'next/head'
import Container from '../../components/container'
import { getAllPostIds, getPostData } from '../../lib/posts'
export default function Post({ postData }) {
return (
<Container>
{postData.id}
<br />
{postData.title}
<br />
{postData.date}
</Container>
)
}
export async function getStaticPaths() {
const paths = getAllPostIds()
return {
paths,
fallback: false
}
}
export async function getStaticProps({ params }) {
const postData = getPostData(params.id)
return {
props: {
postData
}
}
}
posts.js
posts.js contém getAllPostIds () para obter os ids e getPostData () para obter os conteúdos correspondentes.
export function getPostData(id) {
const postOne = {
title: 'One',
id: 1,
date: '7/12/2020'
}
const postTwo = {
title: 'Two',
id: 2,
date: '7/12/2020'
}
if(id == 'one'){
return postOne;
}else if(id == 'two'){
return postTwo;
}
}
export function getAllPostIds() {
return [{
params: {
id: 'one'
}
},
{
params: {
id: 'two'
}
}
];
}
Inicie o servidor Next.js
Execute o seguinte comando para iniciar o servidor -.
npm run dev
> [email protected] dev \Node\nextjs
> next
ready - started server on http://localhost:3000
event - compiled successfully
event - build page: /
wait - compiling...
event - compiled successfully
event - build page: /next/dist/pages/_error
wait - compiling...
event - compiled successfully
Verificar saída
Abra localhost: 3000 / posts / one em um navegador e você verá a seguinte saída.
Abra localhost: 3000 / posts / two em um navegador e você verá a seguinte saída.
No Next.js, até agora estamos usando o componente Link react para navegar de uma página para outra. Também existe uma maneira programática de obter o mesmo usando o componente Roteador. Geralmente o componente roteador é usado com tags html.
Atualize o arquivo index.js no diretório de páginas conforme a seguir.
import Router from 'next/router'
import Head from 'next/head'
function HomePage(props) {
return (
<>
<Head>
<title>Welcome to Next.js!</title>
</Head>
<div>Welcome to Next.js!</div>
<span onClick={() => Router.push('/posts/one')}>First Post</span>
<br/>
<div>Next stars: {props.stars}</div>
<img src="/logo.png" alt="TutorialsPoint Logo" />
</>
)
}
export async function getServerSideProps(context) {
const res = await fetch('https://api.github.com/repos/vercel/next.js')
const json = await res.json()
return {
props: { stars: json.stargazers_count }
}
}
export default HomePage
Inicie o servidor Next.js
Execute o seguinte comando para iniciar o servidor -.
npm run dev
> [email protected] dev \Node\nextjs
> next
ready - started server on http://localhost:3000
event - compiled successfully
event - build page: /
wait - compiling...
event - compiled successfully
event - build page: /next/dist/pages/_error
wait - compiling...
event - compiled successfully
Verificar saída
Abra localhost: 3000 em um navegador e você verá a seguinte saída.
Clique em Primeira postagem, que não é um link, mas é clicável.
Em Next.js, roteamento superficial se refere à navegação para a mesma página, mas nenhuma chamada para os métodos getServerSideProps, getStaticProps e getInitialProps.
Para fazer o roteamento superficial, usamos Roteador com sinalizador raso como verdadeiro. Veja o exemplo abaixo.
Atualize o arquivo index.js no diretório de páginas conforme a seguir.
import Router from 'next/router'
import Head from 'next/head'
function HomePage(props) {
return (
<>
<Head>
<title>Welcome to Next.js!</title>
</Head>
<div>Welcome to Next.js!</div>
<span onClick={() => Router.push('/?counter=1', undefined, { shallow: true })}>Reload</span>
<br/>
<div>Next stars: {props.stars}</div>
<img src="/logo.png" alt="TutorialsPoint Logo" />
</>
)
}
export async function getServerSideProps(context) {
const res = await fetch('https://api.github.com/repos/vercel/next.js')
const json = await res.json()
return {
props: { stars: json.stargazers_count }
}
}
export default HomePage
Inicie o servidor Next.js
Execute o seguinte comando para iniciar o servidor -.
npm run dev
> [email protected] dev \Node\nextjs
> next
ready - started server on http://localhost:3000
event - compiled successfully
event - build page: /
wait - compiling...
event - compiled successfully
event - build page: /next/dist/pages/_error
wait - compiling...
event - compiled successfully
Verificar saída
Abra o localhost: 3000 em um navegador e clique no link Recarregar e você verá a seguinte saída.
Rotas de API é uma maneira de criar API rest usando Next.js. Next.js mapeia qualquer arquivo presente em/pages/apipasta e será tratado como ponto final da API. Um exemplo de função API -
export default (req, res) => {
...
}
A seguir estão alguns pontos importantes a serem considerados.
req - req é uma instância de http.IncomingMessage e é usado para obter dados da solicitação.
res - res é uma instância de http.ServerResponse e é usado para enviar dados como resposta.
Vamos criar um exemplo para demonstrar o mesmo.
Neste exemplo, vamos criar um user.js em pages/api diretório.
Vamos atualizar o projeto nextjs usado no capítulo Suporte Global de CSS .
Crie o arquivo user.js no diretório pages / api como segue.
export default (req, res) => {
res.statusCode = 200
res.setHeader('Content-Type', 'application/json')
res.end(JSON.stringify({ name: 'Robert' }))
}
Inicie o servidor Next.js
Execute o seguinte comando para iniciar o servidor -.
npm run dev
> [email protected] dev D:\Node\nextjs
> next
ready - started server on http://localhost:3000
info - Loaded env from D:\Node\nextjs\.env.local
event - compiled successfully
event - build page: /api/user
wait - compiling...
event - compiled successfully
event - build page: /next/dist/pages/_error
wait - compiling...
event - compiled successfully
Verificar saída
Abra localhost: 3000 / api / user em um navegador e você verá a seguinte saída.
{"name":"Robert"}
Rotas de API em Next.JS têm middlewares integrados que ajudam a analisar a solicitação de entrada.
A seguir estão os middlewares
req.cookies- o objeto cookies contém os cookies enviados pela solicitação. O valor padrão é {}.
req.query- objeto de consulta contém a string de consulta. O valor padrão é {}.
req.body- objeto de consulta contém o corpo da solicitação analisado usando 'tipo de conteúdo'. O valor padrão é nulo.
Vamos criar um exemplo para demonstrar o mesmo.
Neste exemplo, vamos atualizar um user.js em pages/api diretório.
Vamos atualizar o projeto nextjs usado no capítulo Rotas de API .
Crie o arquivo user.js no diretório pages / api como segue.
export default (req, res) => {
res.statusCode = 200
res.setHeader('Content-Type', 'application/json')
res.end(JSON.stringify({ query: req.query }))
}
Inicie o servidor Next.js
Execute o seguinte comando para iniciar o servidor -.
npm run dev
> [email protected] dev D:\Node\nextjs
> next
ready - started server on http://localhost:3000
info - Loaded env from D:\Node\nextjs\.env.local
event - compiled successfully
event - build page: /api/user
wait - compiling...
event - compiled successfully
event - build page: /next/dist/pages/_error
wait - compiling...
event - compiled successfully
Verificar saída
Abra http: // localhost: 3000 / api / user? Counter = 1 em um navegador e você verá a seguinte saída.
{"query":{"counter":"1"}}
res objeto tem express.js como métodos auxiliares para facilitar o desenvolvimento para criar serviços.
A seguir estão os métodos auxiliares de resposta
res.status(code)- Este método define o status da resposta. O código passado deve ser um status HTTP válido.
req.json(json)- Este método retorna uma resposta JSON. json aprovado deve ser um objeto JSON válido.
req.send(body)- Este método envia uma resposta HTTP. A resposta pode ser string, objeto ou buffer.
Vamos criar um exemplo para demonstrar o mesmo.
Neste exemplo, vamos atualizar um user.js em pages/api diretório.
Vamos atualizar o projeto nextjs usado no capítulo Rotas de API .
Crie o arquivo user.js no diretório pages / api como segue.
export default (req, res) => {
res.status(200).json({ name: 'Robert' });
}
Inicie o servidor Next.js
Execute o seguinte comando para iniciar o servidor -.
npm run dev
> [email protected] dev D:\Node\nextjs
> next
ready - started server on http://localhost:3000
info - Loaded env from D:\Node\nextjs\.env.local
event - compiled successfully
event - build page: /api/user
wait - compiling...
event - compiled successfully
event - build page: /next/dist/pages/_error
wait - compiling...
event - compiled successfully
Verificar saída
Abra http: // localhost: 3000 / api / user em um navegador e você verá a seguinte saída.
{ name: 'Robert' }
Next.js, tem excelente suporte para typescript. A seguir estão algumas etapas para habilitar o texto digitado no projeto.
Crie tsconfig.json
Crie tsconfig.json no diretório raiz. Estamos mantendo-o vazio inicialmente. Agora inicie o servidor.
Next.JS detectará tsconfig.json e mostrará a mensagem a seguir no console.
npm run dev
> [email protected] dev D:\Node\nextjs
> next
ready - started server on http://localhost:3000
It looks like you're trying to use TypeScript but do not have the required package(s) installed.
Please install typescript, @types/react, and @types/node by running:
npm install --save-dev typescript @types/react @types/node
If you are not trying to use TypeScript, please remove the tsconfig.json file from your package root (and any TypeScript files).
...
Instale o typescript
Execute o comando npm install para instalar o typescript e as bibliotecas relacionadas.
npm install --save-dev typescript @types/react @types/node
...
+ @types/[email protected]
+ @types/[email protected]
+ [email protected]
added 5 packages from 72 contributors and audited 839 packages in 27.538s
...
Inicie o servidor Next.js
Execute o seguinte comando para iniciar o servidor -.
npm run dev
> [email protected] dev D:\Node\nextjs
> next
ready - started server on http://localhost:3000
We detected TypeScript in your project and created a tsconfig.json file for you.
Your tsconfig.json has been populated with default values.
event - compiled successfully
wait - compiling...
event - compiled successfully
Abra tsconfig.json
O servidor NextJS modificou o tsconfig.json.
{
"compilerOptions": {
"target": "es5",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"skipLibCheck": true,
"strict": false,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve"
},
"exclude": [
"node_modules"
],
"include": [
"next-env.d.ts",
"**/*.ts",
"**/*.tsx"
]
}
Crie hello.ts
Crie hello.ts no diretório pages / api que atuará como um serviço de descanso para nós.
import { NextApiRequest, NextApiResponse } from 'next'
export default (_: NextApiRequest, res: NextApiResponse) => {
res.status(200).json({ text: 'Welcome to TutorialsPoint' })
}
Inicie o servidor Next.js
Execute o seguinte comando para iniciar o servidor -.
npm run dev
> [email protected] dev \Node\nextjs
> next
ready - started server on http://localhost:3000
event - compiled successfully
event - build page: /
wait - compiling...
event - compiled successfully
event - build page: /next/dist/pages/_error
wait - compiling...
event - compiled successfully
Verificar saída
Abra localhost: 3000 / api / hello em um navegador e você verá a seguinte saída.
{"text":"Welcome to TutorialsPoint"}
Next.js, tem suporte para publicar variáveis de ambiente no nó que podemos usar na conexão com o servidor, banco de dados etc. Para isso, precisamos criar o arquivo .env.local no diretório raiz. Também podemos criar .env.production.
Crie .env.local
Crie .env.local no diretório raiz com o seguinte conteúdo.
DB_HOST=localhost
DB_USER=tutorialspoint
DB_PASS=nextjs
Crie env.js
Crie uma página chamada env.js com o seguinte conteúdo no diretório pages / posts onde usaremos as variáveis de ambiente usando process.env.
import Head from 'next/head'
import Container from '../../components/container'
export default function FirstPost(props) {
return (
<>
<Container>
<Head>
<title>Environment Variables</title>
</Head>
<h1>Database Credentials</h1>
<p>Host: {props.host}</p>
<p>Username: {props.username}</p>
<p>Password: {props.password}</p>
</Container>
</>
)
}
export async function getStaticProps() {
// Connect to Database using DB properties
return {
props: {
host: process.env.DB_HOST,
username: process.env.DB_USER,
password: process.env.DB_PASS
}
}
}
Agora inicie o servidor.
O Next.JS detectará .env.local e mostrará a mensagem a seguir no console.
npm run dev
> [email protected] dev D:\Node\nextjs
> next
ready - started server on http://localhost:3000
info - Loaded env from D:\Node\nextjs\.env.local
event - compiled successfully
wait - compiling...
event - compiled successfully
event - build page: /posts/env
wait - compiling...
event - compiled successfully
Verificar saída
Abra localhost: 3000 / posts / env em um navegador e você verá a seguinte saída.
Até agora, desenvolvemos e executamos o aplicativo NEXT.JS de amostra no modo dev, agora faremos a implantação pronta para produção localmente usando as etapas a seguir.
npm run build - Construir a construção pronta para produção e altamente otimizada.
npm run start - Inicie o servidor.
A compilação pronta para produção carece de mapas de origem e recarregamento de código ativo em comparação com o modo de desenvolvimento, pois esses recursos são usados principalmente na depuração.
Prepare Build
Execute o seguinte comando para preparar o build pronto para produção -.
npm run build
> [email protected] build \Node\nextjs
> next build
info - Loaded env from \Node\nextjs\.env.local
Creating an optimized production build
Compiled successfully.
Automatically optimizing pages
Page Size First Load JS
+ ? / 2.25 kB 60.3 kB
+ /_app 288 B 58.1 kB
+ /404 3.25 kB 61.3 kB
+ ? /api/user
+ ? /posts/[id] 312 B 61.6 kB
+ + /posts/one
+ + /posts/two
+ ? /posts/env 2.71 kB 60.8 kB
+ ? /posts/first 374 B 61.7 kB
+ First Load JS shared by all 58.1 kB
+ static/pages/_app.js 288 B
+ chunks/3458401054237127135bcd3ee8eb2a19d67af299.a1a019.js 10.5 kB
+ chunks/framework.c6faae.js 40 kB
+ runtime/main.60464f.js 6.54 kB
+ runtime/webpack.c21266.js 746 B
+ css/9706b5b8ed8e82c0fba0.css 175 B
? (Server) server-side renders at runtime (uses getInitialProps or getServerSideProps)
(Static) automatically rendered as static HTML (uses no initial props)
? (SSG) automatically generated as static HTML + JSON (uses getStaticProps)
Inicie o servidor
Execute o seguinte comando para iniciar o servidor de produção -.
npm run start
> [email protected] start \Node\nextjs
> next start
info - Loaded env from \Node\nextjs\.env.local
ready - started server on http://localhost:3000
Verificar saída
Abra localhost: 3000 / api / user em um navegador e você verá a seguinte saída.
{"name":"Robert"}
NEXT.JS fornece uma CLI para iniciar, construir e exportar aplicativos. Ele pode ser chamado usando o npx, que vem com o npm 5.2 em diante.
Ajuda CLI
Para obter uma lista de comandos CLI e ajuda sobre eles, digite o seguinte comando.
npx next -h
Usage
$ next <command>
Available commands
build, start, export, dev, telemetry
Options
--version, -v Version number
--help, -h Displays this message
For more information run a command with the --help flag
$ next build --help
Construir Pronto para Produção Construir
Digite o seguinte comando.
npx next build
info - Loaded env from D:\Node\nextjs\.env.local
Creating an optimized production build
Compiled successfully.
Automatically optimizing pages
Page Size First Load JS
+ ? / 2.25 kB 60.3 kB
+ /_app 288 B 58.1 kB
+ /404 3.25 kB 61.3 kB
+ ? /api/user
+ ? /posts/[id] 312 B 61.6 kB
+ + /posts/one
+ + /posts/two
+ ? /posts/env 2.71 kB 60.8 kB
+ ? /posts/first 374 B 61.7 kB
+ First Load JS shared by all 58.1 kB
+ static/pages/_app.js 288 B
+ chunks/ab55cb957ceed242a750c37a082143fb9d2f0cdf.a1a019.js 10.5 kB
+ chunks/framework.c6faae.js 40 kB
+ runtime/main.60464f.js 6.54 kB
+ runtime/webpack.c21266.js 746 B
+ css/9706b5b8ed8e82c0fba0.css 175 B
? (Server) server-side renders at runtime (uses getInitialProps or getServerSideProps)
(Static) automatically rendered as static HTML (uses no initial props)
? (SSG) automatically generated as static HTML + JSON (uses getStaticProps)
Construir e iniciar o servidor de desenvolvimento
Digite o seguinte comando.
npx next dev
ready - started server on http://localhost:3000
info - Loaded env from D:\Node\nextjs\.env.local
event - compiled successfully
Inicie o servidor de produção
Digite o seguinte comando.
npx next start
info - Loaded env from \Node\nextjs\.env.local
ready - started server on http://localhost:3000