Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
node_modules/

##MacOs
.DS_Store
9 changes: 2 additions & 7 deletions Enlaces.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,2 @@
1. [Enlace Como crear un ToDO List (Ejemplo)](https://vegibit.com/node-js-todo-list-tutorial/)
2. [Enlace de app similar](https://www.youtube.com/watch?v=v2GKt39-LPA)
3. [Enlace de como usar Inquirer](https://www.digitalocean.com/community/tutorials/nodejs-interactive-command-line-prompts)
4. [Enlace Node Readline (Como crear interfaz de consola e interactuar con ella)](https://nodejs.org/dist/latest-v17.x/docs/api/readline.html)
5. [Enlace Node File System (Manejar archivos en local o en remoto)](https://nodejs.org/dist/latest-v17.x/docs/api/fs.html)
6. [Enlace Como crear una App de Consola (Sólo saqué la idea de organización)](https://medium.com/@maniakhitoccori/cómo-crear-una-aplicación-real-de-node-cli-con-node-db1338fa1d9b)

1. [Enlace estructura proyecto Node y Express ](https://medium.com/williambastidasblog/estructura-de-una-api-rest-con-nodejs-express-y-mongodb-cdd97637b18b)
2. [Validación de archivos](https://pharos.sh/cargue-la-gestion-de-archivos-en-node-js-con-express-y-multer/)
59 changes: 15 additions & 44 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,50 +1,21 @@
<h1 align="center">Welcome to Developers Team - Todo App👋</h1>
<h1 align="center">Welcome to Node Rest Server👋</h1>
**Para iniciar servidor**

> Pequeño programa en node.js para hacer y administrar &#34;to-dos&#34;
``npm i``-> Instala modulos requeridos.

Para probar el modulo inquirer:
`npm install inquirer`
`node inquirerTest.js` -> Prueba de como ingresar datos por consola.
`node createTest.js`-> Prueba de como crear una tarea por consola.
``npm start`` -> Inicializa servidor.

Propuesta de la tarea, la idea es que todos usemos el mismo objeto para que sea más fácil integrar cada funcionalidad:
const toDo = {
taskName: 'Nombre de tarea',
taskStartDate: 'Fecha de Inicio',
taskEndDate: 'Fecha de Fin',
taskDescription:'Descripción y/o detalles',
taskUser:'Usuario Asignado'
}

## Install
Para instalar inquirer ->
```sh
npm install inquirer
```
Nivell 1
- Exercici 1
Crea un servidor amb Express que retorni a una petició GET a l'endpoint /user un json amb el teu nom, edat i la url des d'on es fa la petició.

## Usage
- Exercici 2
Afegeix un endpoint /upload per a pujar al servidor un arxiu de tipus png, jpg o gif que retorni un missatge d'error en cas que l'extensió de l'arxiu no coincideixi amb aquestes.

```sh
npm start
```
Nivell 2
- Exercici 1
Creu un endpoint /time que rebi per POST com a paràmetre un JSON amb el nom d'usuari i retorni un objecte JSON que contingui l'hora i data actual. Inclogui un middleware que afegeixi la capçalera Cache-control: no-cache. Habiliti CORS (Cross-Origin Resource Sharing) en les respostes, ja sigui mitjançant Express o mitjançant un altre middleware.

## Run tests

```sh
npm run test
```

## Authors

👤 **Mauricio, Pere Ruiz, Bianca Inga**

- Github: [@molivaresr] (https://github.com/molivaresr), [En\_Pere] (https://github.com/En_Pere), [Blanket25] (https://github.com/Blanket25)
## Our Organization sheet
[Trello](https://trello.com/b/2ujcduIe/developer-team)
## Show your support

Give a ⭐️ if this project helped you!

---

_This README was generated with ❤️ by [readme-md-generator](https://github.com/kefranabg/readme-md-generator)_
Nivell 3
- Exercici 1
Afegeixi un middleware a l'endpoint anterior que retorni un HTTP Status 401 - Unauthorized si la capçalera de la petició no conté autenticació bàsica (usuari i contrasenya).
33 changes: 33 additions & 0 deletions api/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
//Crea servidor
const express = require('express');
const multer = require('multer');
const cors = require('cors');
const bodyParser = require('body-parser');
const morgan = require('morgan');

const users = require('../api/routes/users')
const uploads = require('./routes/uploads')
const time = require('../api/routes/time')

//Crea express app
const app = express ();

//Activa CORS
app.use(cors());

//Otros middlewares
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.use(morgan('dev'));
app.use(express.json());

//

//Rutas
app.use('/api/users', users);
app.use('/api/uploads', uploads);
app.use('/api/time', time);

//Port
const port = process.env.PORT || 3000; //Variable de entorno que captura el puerto que esta desginado en el ordenador
app.listen(port, () => console.log(`Listening on port ${port}...`))
2 changes: 2 additions & 0 deletions api/controllers/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
### Controladores
Archivo controlador de ejemplo. En el programamos las acciones y operaciones sobre nuestra base de datos, en este caso para obtener los datos de un usuario.
23 changes: 23 additions & 0 deletions api/controllers/multerConf.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
const multer = require('multer');
const path = require('path')

//Configurar Multer
const storage = multer.diskStorage({
destination:'./uploads/',
limits:{
files: 1, //Máximo 1 archivo
fieldSize: 2 * 1024 * 1024
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname))
}
});
const imageFilter = (req,file,cb) => {
if(!file.originalname.match(/.(jpg|JPG|jpeg|JPEG|png|PNG|gif|GIF)$/)){
req.fileValidationError='Sólo se permiten imagenes';
return cb(new Error('Sólo se permiten imagenes'), false);
}
cb(null,true);
};

module.exports = {storage, imageFilter};
2 changes: 2 additions & 0 deletions api/database/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
### Bases de datos
Lugar donde se almacena el JSON
1 change: 1 addition & 0 deletions api/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
//Conectar BD
3 changes: 3 additions & 0 deletions api/middlewares/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
### Middlewares
Archivo con el middleware para validar la autenticación del usuario.
Cabecera Cache-control: no-cache
5 changes: 5 additions & 0 deletions api/middlewares/cacheMiddleware.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
module.exports = cacheMiddleware = (req,res,next)=>{
res.set('Cache-control', 'no-cache')
next()
}

2 changes: 2 additions & 0 deletions api/models/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
### Models
Para crear los esquema y modelos de usuarios
2 changes: 2 additions & 0 deletions api/routes/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
### Routes
Archivo en el que definimos las rutas (path) a las que responderá nuestra aplicación y en ellas se encontrará la lógica a ejecutar.
28 changes: 28 additions & 0 deletions api/routes/time.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
const express = require('express');
const router = express.Router();
const cors = require('cors');

const midCache = (req, res, next) => {
res.set('Cache-Control','no-cache');
next()
}

const checkAuth = (req, res, next) => {
const user = req.body.user;
const password = req.body.password;
if(!user || !password) {
res.status(401).send({message:"Usuario y/ Contraseña incorrecta"})
}
next()
}

router.post('/',cors(), checkAuth, midCache,(req,res) => {
const user = req.body;
const respuesta = {
user: user,
date: new Date().toLocaleString()
}
res.json(respuesta)
})

module.exports = router
32 changes: 32 additions & 0 deletions api/routes/uploads.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
const express = require('express');
const router = express.Router();
const multer = require('multer')
const {storage, imageFilter} = require('../controllers/multerConf')

router.get('/', (req,res) => {
res.send('Subiendo Archivos')
});

router.post('/', (req,res) => {
let upload = multer({storage: storage, fileFilter: imageFilter}).single('profilePic');

upload(req,res, function(err) {
if(req.fileValidationError){
return res.send(req.fileValidationError).status(400);
}
else if(!req.file) {
return res.send('Debes seleccionar una imagen').status(400);
}
else if(err instanceof multer.MulterError) {
return res.send(err).status(400);
}
else if (err){
return res.send(err);
}

res.send('Imagen subida').status(200)
})

});

module.exports = router
39 changes: 39 additions & 0 deletions api/routes/users.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
const express = require('express');
const req = require('express/lib/request');
const router = express.Router();
const Joi = require('joi');
const users = [] // "Persistencia"

router.get('/', (req,res) => {
const user = {
id: users.length + 1,
name: 'Mauricio',
age: '54',
url: req.originalUrl
}
res.status(200).send(user)
});

//Create new user
router.post('/', (req, res) => {
const schema = Joi.object ({
name: Joi.string().required().min(3),
age: Joi.number().required().greater(17),
});

const {error, result} = schema.validate(req.body);

if(error) return res.status(400).send(error.details[0].message);

const user = {
id: users.length + 1,
name: req.body.name,
age: req.body.age,
url: req.originalUrl
}
users.push(user);
res.send(users);
});


module.exports = router
13 changes: 0 additions & 13 deletions cmds/create.js

This file was deleted.

3 changes: 0 additions & 3 deletions cmds/delete.js

This file was deleted.

3 changes: 0 additions & 3 deletions cmds/findBy.js

This file was deleted.

3 changes: 0 additions & 3 deletions cmds/help.js

This file was deleted.

3 changes: 0 additions & 3 deletions cmds/show.js

This file was deleted.

3 changes: 0 additions & 3 deletions cmds/update.js

This file was deleted.

38 changes: 0 additions & 38 deletions createTest.js

This file was deleted.

Loading