-
Criar a pasta do projeto:
mkdir api-typescript
-
Entrar na pasta:
cd api-typescript
-
Abrir VSCode no projeto:
code .
-
Inicializar projeto Node:
npm init -y
. Isso gera o arquivopackage.json
-
Criar pasta
src
na raiz do projeto -
Criar arquivo
server.ts
dentro da pasta src -
Alterar arquivo package.json:
- trocar "main": "index.js" por "main": "src/server.ts"
- editar script test para "dev": "tsx watch src/server.js"
- Instalar bibliotecas:
- ExpressJS, CORS:
npm install express cors
- Typescript, @types/node, @types/express, tsx:
npm install typescript @types/node @types/express @types/cors tsx -D
- Inicializar configurações Typescript:
npx tsc --init
- Edite o arquivo src/server.ts e adicione o seguinte conteúdo:
import express from 'express'
import cors from 'cors'
const app = express()
app.use(cors())
app.use(express.json())
app.get('/users', (req, res) => {
return res.json({ message: 'Listagem de usuários' })
})
app.post('/users/new', (req, res) => {
return res.json({ message: 'Usuário criado com sucesso' })
})
app.listen(3333, () => console.log('Server is running!'))
- Edite o endpoint do tipo POST, no arquivo src/server.ts, e adicione o seguinte conteúdo ao corpo da função:
app.post('/users/new', (req, res) => {
const { name, email } = req.body
console.log(name, email)
return res.json({ message: 'Usuário criado com sucesso', user: { name, email } })
})
Até agora nossa Web API não é capaz de armazenar dados, pois não dispõe de nenhum serviço de BD.
Instanciaremos uma lista de objetos temporários do tipo User para estarmos aptos a utilizar os endpoints do tipo PUT e DELETE.
- Defina um tipo User e instancie uma lista de usuários vazia após a criação da variável app, que servirá como banco de dados temporário, conforme o exemplo a seguir:
...
type User = {
id: number
name: string
email: string
}
const users: User[] = []
...
- Altere o endpoint GET para obter os usuários da lista users, conforme o código a seguir:
app.get('/users', (req, res) => {
return res.json(users)
})
- Altere o endpoint POST para inserir os novos usuários na lista users.
app.post('/users/new', (req, res) => {
const newUser: User = req.body
newUser.id = users.length + 1
users.push(newUser)
console.log(users)
return res.json({ message: 'Usuário criado com sucesso', user: newUser })
})
- Adicione o endpoint PUT logo após o endpoint POST, com o seguinte código:
app.put('/users/edit/:id', (req, res) => {
const { id } = req.params
const { name, email } = req.body
console.log(id, name, email)
return res.json({ message: 'Usuário atualizado com sucesso', user: { id, name, email } })
})
- Adicione o endpoint PUT para atualizar os dados do usuário, conforme o código a seguir:
app.put('/users/edit/:id', (req, res) => {
const { id } = req.params
const { name, email } = req.body
const user = users.find(user => user.id === Number(id))
if (!user) return res.status(404).json({ message: 'Usuário não encontrado' })
user.name = name
user.email = email
return res.json({ message: 'Usuário atualizado com sucesso', user: { id, name, email } })
})
- O endpoint DELETE é similar ao endpoint PUT. Para adicioná-lo, basta seguir o código a seguir:
app.delete('/users/delete/:id', (req, res) => {
const { id } = req.params
const user = users.find(user => user.id === Number(id))
if (!user) return res.status(404).json({ message: 'Usuário não encontrado' })
users.splice(users.indexOf(user), 1)
return res.status(204).send()
})