Projeto pessoal de API REST Node.js (back-end) para anotações (ideias, lembretes, compras?).
Projeto também com o objetivo de colocar em prática / relembrar tecnologias, frameworks, conceitos, etc. da área de desenvolvimento de software que estou estudando: JavaScript/ECMAScript, Node.js / Express.
Em um futuro não muito distante espero melhorá-lo, aplicar correções, incluir novas funcionalidades e integrá-lo com o projeto Anotacoes (front-end).
-
Criação do banco de dados e tabelas utilizadas no projeto (Obs: favor pesquisar como instalar e acessar o MySQL Server)
CREATE DATABASE notes; USE notes; CREATE TABLE `notesToDo` ( `key` INT UNSIGNED NOT NULL PRIMARY KEY, `description` VARCHAR(255) NOT NULL ); CREATE TABLE `notesDone` ( `key` INT UNSIGNED NOT NULL PRIMARY KEY, `description` VARCHAR(255) NOT NULL ); CREATE TABLE `notesDeleted` ( `key` INT UNSIGNED NOT NULL PRIMARY KEY, `description` VARCHAR(255) NOT NULL );
-
Download do projeto
- opções "Clone or download" e "Download ZIP".
-
Configurações e execução do servidor (terminal) (após extração do projeto / arquivo ZIP)
-
No arquivo login.js do projeto, substituir
<user>
e<password>
pelo usuário e senha definidos na instalação do MySQL. -
[se não estiver instalado] Instalar o gerenciador de pacotes NPM:
$ sudo npm install npm -g
-
Acessar o diretório do servidor:
$ cd server
-
Instalar as dependências (pacotes) utilizados pelo projeto:
$ sudo npm install
-
Executar o servidor (Ctrl + C para Cancelar):
$ npm start
ou
$ npm run dev
Se o servidor executar corretamente, uma das mensagens exibidas no terminal deverá ser parecida com 'Server running on port [porta]...'.
-
-
Com o servidor executando (ver acima), as requisições às seguintes rotas podem ser realizadas (no terminal com o comando curl ou com o programa Postman, por exemplo):
$ curl -X GET http://localhost:3001/ -v
$ curl -X GET 'http://localhost:3001/search?description=o' -v
$ curl -X GET http://localhost:3001/notes/notes-to-do -v
$ curl -X GET http://localhost:3001/notes/notes-to-do/1 -v
$ curl -X POST http://localhost:3001/notes/notes-to-do \ -H 'Content-Type: application/json' \ -d '{ "key": 1, "description": "anotacao adicionada" }' -v
$ curl -X PUT http://localhost:3001/notes/notes-to-do/1 \ -H 'Content-Type: application/json' \ -d '{ "description": "atualizacao da descricao" }' -v
$ curl -X DELETE http://localhost:3001/notes/notes-to-do/1 -v
$ curl -X GET http://localhost:3001/notes/notes-done -v
$ curl -X GET http://localhost:3001/notes/notes-done/1 -v
$ curl -X POST http://localhost:3001/notes/notes-done \ -H 'Content-Type: application/json' \ -d '{ "key": 1, "description": "anotacao verificada" }' -v
$ curl -X DELETE http://localhost:3001/notes/notes-done/1 -v
$ curl -X GET http://localhost:3001/notes/notes-deleted -v
$ curl -X GET http://localhost:3001/notes/notes-deleted/1 -v
$ curl -X POST http://localhost:3001/notes/notes-deleted \ -H 'Content-Type: application/json' \ -d '{ "key": 1, "description": "anotacao excluida" }' -v
$ curl -X DELETE http://localhost:3001/notes/notes-deleted/1 -v
-
Verificação das respostas (alguns dos tópicos listados abaixo não aparecem em todas as requisições / rotas):
-
> < HTTP/1.1 200 OK <
> < HTTP/1.1 201 Created <... < Location: /notes/notes-to-do/1
> < HTTP/1.1 201 Created <... < Location: /notes/notes-done/1
> < HTTP/1.1 201 Created <... < Location: /notes/notes-deleted/1
> < HTTP/1.1 204 No Content <...
> < HTTP/1.1 400 Bad Request <...
> < HTTP/1.1 404 Not Found <...
> < HTTP/1.1 409 Conflict <...
> < HTTP/1.1 500 Internal Server Error <...
-
Textos possíveis em formato JSON no corpo da resposta:
{ "message": "https://github.com/Goliass/anotacoes-backend-nodejs" }
{ "notesToDo": [ { "key": 1, "description": "anotacao adicionada" } ], "notesDone": [ { "key": 1, "description": "anotacao verificada" } ], "notesDeleted": [ { "key": 1, "description": "anotacao excluida" } ] }
{ "notes": [ { "key": 1, "description": "anotacoes" } ] }
{ "notes": [] }
{ "note": { "key": 1, "description": "anotacao adicionada" }, "links": [ { "href": "http://localhost:3001/notes/notes-to-do/1", "rel": "Update", "method": "PUT", "params": { "description": "new value" } }, { "href": "http://localhost:3001/notes/notes-to-do/1", "rel": "Delete", "method": "DELETE" } ] }
{ "note": { "key": 1, "description": "anotacao verificada" }, "links": [ { "href": "http://localhost:3001/notes/notes-done/1", "rel": "Delete", "method": "DELETE" } ] }
{ "note": { "key": 1, "description": "anotacao excluida" }, "links": [ { "href": "http://localhost:3001/notes/notes-deleted/1", "rel": "Delete", "method": "DELETE" } ] }
{ "errors": [ { "value": 0, "msg": "The key parameter must be an integer value greater than or equal to 1", "param": "key", "location": "body" }, { "value": "", "msg": "The description parameter must have at least 1 character", "param": "description", "location": "body" } ] }
-