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 29

Preguntas 4

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

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.

Ser铆a bueno que programen todo en ingles o en espa帽ol pero no mezclar.

驴El archivo network se podr铆a llamar routes, correcto?

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

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, 鈥楬ello, 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鈥

Aislar el c贸digo de la base de datos

Ahora una base de datos de prueba por el momento. Creamos una carpeta 鈥榮tore鈥 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 鈥榗omponents/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"
    }
  ]
}

lo unico que 鈥渘o 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:鈥\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 鈥渃ontrolador鈥 (que interactua con la vista) y el archivo controller.js vendria siendo lo que en java es el 鈥渟ervice鈥 o DAO

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