Crea una cuenta o inicia sesión

¡Continúa aprendiendo sin ningún costo! Únete y comienza a potenciar tu carrera

Aislar el código de la base de datos

4/29
Recursos

Aportes 32

Preguntas 5

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Tambien se puede usar en la funcion get() de dummy find en lugar de filter, ya que find te regresa el primero que encuentra, y filter te regresa todos los que cumplan con la condicion.

function get(table,id){
    let col = list(table)
    return col.find(item => item.id == id) || null
}

Ya que queremos que regrese el primero nos sirve el find.

¿El archivo network se podría llamar routes, correcto?

Sería bueno que programen todo en ingles o en español pero no mezclar.

El mejor profesor. No hay forma de perderse con él.

Les recomiendo usar la extensión de Chrome JSON viewer para que se vea más comprensible el JSON en la ventana, facilita mucho la lectura. https://chrome.google.com/webstore/detail/json-viewer/gbmdgpbipfallnflgajpaliibnhdgobh

Me gusta como vamos, solo como sugerencia todas las variables deberían ir en inglés. Hay que irnos acostumbrando al lenguaje y a tener un estandar.

Esta forma de realizar las consultas a la base de datos es simple y ahorra tiempo, pero no la recomiendo para proyectos profesionales, en su lugar, lo mejor es crear procedimientos almacenados

Aislar el código de la base de datos

Ahora una base de datos de prueba por el momento. Creamos una carpeta ‘store’ en la raíz y dentro un archivo dummy.js:

const db = {
  'user': [
    { id: 1, name: 'Miguel' }
  ]
}

function list(table) {
  return db[table]
}

function get(table, id) {
  let collection = list(table)
  return collection.filter(item => item.id === id)[0] || null
}

function upsert(table, data) {
  db[collection].push(data)
}

function remove(table, id) {
  return true
}

module.exports = {
  list,
  get,
  upsert,
  remove
}

Dentro de ‘components/user/’ creamos controller.js:

//* Debe tener acceso a network

const store = require('../../../store/dummy')

const TABLA = 'user'

function list() {
  return store.list(TABLA)
}

module.exports = {
  list
}

Actualizamos network.js:

const express = require('express')

const response = require('../../../network/response')
const Controller = require('./controller')

const router = express.Router()

router.get('/', (req, res) => {
  const lista = Controller.list()
  response.success(req, res, lista, 200)
})

module.exports = router

Y si ahora vamos a https://localhost:3000/api/user tendremos este json:

{
  "error": false,
  "status": 200,
  "body": [
    {
      "id": 1,
      "name": "Miguel"
    }
  ]
}

Implementación en TypeScript

controller.ts

import * as store from "../../../data/dummy";

const TABLA = 'user';

function list() {
    return store.list(TABLA);
}

export {
    list
}```

_app.ts_

import { config } from ‘…/…/config’;
import response from ‘…/network/response’;

import {router as user} from ‘./components/user/network’;

const app = express();
app.use(json());

app.use(’/api/user/’, user)

app.get(’/’, (req, res) => {
response.success(req, res, ‘Hello, TypeScript!’, 200);
});```

Yo le agregué un poco de lógica al método remove, para tener un comportamiento un poco más parecido al de una DB!
.

Muy bueno Profe Carlos. Al principio me enrede un poco, pero luego fui conectando. Excelente contenido

Excelente teacher, cada vez se entiende mas todo este tema de Node…

Este curso está dictado por un español, no sé si está nervio, pero no le entiendo cuando habla.
Hola no me funcionó, en el navegador me muestra lista pero no los elementos de la BD, { "error": false, "status": 200, "body": "lista" }

Me parece que es más sencillo si el controlador es una función que recibe el (req, res) de la petición. Para que quede algo como esto:

// user/network.js
router.get('/', Controller.list)

// controller.js
function list(req, res) {
  // @code
}

lo unico que “no me agrada” es que va llamando los metodos antes de crearlos, lo que hace que no sean reconocidos por el texto predictivo.

En el caso de la función get en dummy.js creo que sería mejor usar array.find() es más eficiente y descriptivo.

adjunto las capturas del codigo necesario para editar y eliminar ademas de logica para insertar

controller

network

db

muy buena practica

Excelente clase, y super interesante como separa lo de la db

Me encanta cómo explica el profesor. Muy bueno.

Me agradó la implementación de la capa de acceso a datos, es bastante escalable para proyectos que evolucionan rápidamente. Y ya quiero ver cómo usarlo para testing :sm

De los profes de Platzi con las clases mejor logradas!
Excelente!

Excelente

cuando escribo: localhost:3000/api/user me da el siguiente error:
RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: Todo correcto
at ServerResponse.writeHead (_http_server.js:208:11)
at ServerResponse._implicitHeader (http_server.js:199:8)
at write
(_http_outgoing.js:585:9)
at ServerResponse.end (_http_outgoing.js:709:5)
at ServerResponse.send (C:…\PlatziSocial\node_modules\express\lib\response.js:221:10)
at ServerResponse.json (C:…s\PlatziSocial\node_modules\express\lib\response.js:267:15)
at ServerResponse.send (C:…\PlatziSocial\node_modules\express\lib\response.js:158:21)
at Object.exports.success (C:…\PlatziSocial\network\response.js:4:24)
at C:…\PlatziSocial\api\components\user\network.js:10:14
at Layer.handle [as handle_request] (C:…\PlatziSocial\node_modules\express\lib\router\layer.js:95:5)

Me imagino que podemos usar un archivo para cada base de datos que queramos usar, en el caso que usemos mas de un tipo de BD.

Genial 😃

Excelente practica.

Me imagino que podemos usar un archivo para cada base de datos que queramos usar, en el caso que usemos mas de un tipo de BD.

para este caso el archivo user/network.js vendria siendo el “controlador” (que interactua con la vista) y el archivo controller.js vendria siendo lo que en java es el “service” o DAO

Muy pero muy buena explicación de manejo de datos dummys