¿Cómo actualizar un registro en su base de datos local/personalizada en Node.js?

La base de datos personalizada significa la base de datos local en su sistema de archivos. Hay dos tipos de base de datos ‘SQL’ y ‘NoSQL’. En la base de datos SQL, los datos se almacenan en forma de tabla y en la base de datos Nosql, los datos se almacenan de forma independiente con alguna forma particular de identificar cada registro de forma independiente. También podemos crear nuestra propia base de datos o almacén de datos localmente en forma de Nosql.

Hay algunos pasos involucrados en la creación de la base de datos local y la creación, búsqueda y actualización de la información de la misma. Estos pasos son los siguientes:

  1. Cree el archivo package.json en la raíz del directorio del proyecto usando el siguiente comando:
    npm init -y
  2. Instale el paquete express y body-parser usando el siguiente comando:
    npm install express
    npm install body-parser
    
  3. Cree una ruta POST para solicitar una base de datos de usuario particular usando id.
  4. Configure el servidor para que se ejecute en un puerto específico (Puerto del desarrollador: 3000).
  5. Cree un archivo de repositorio y agregue toda la lógica relacionada con la creación de una base de datos local.
  6. Cree un método en el archivo del repositorio para actualizar un registro de la base de datos usando id.

Ejemplo: Este ejemplo ilustra cómo actualizar un registro en una base de datos personalizada local.

Nombre de archivo: index.js

const express = require('express')
const bodyParser = require('body-parser')
  
const repo = require('./repository')
const updateTemplet = require('./updateRecordForm')
  
const app = express()
const port = process.env.PORT || 3000
  
// The body-parser middleware to parse form data
app.use(bodyParser.urlencoded({extended : true}))
  
// Home page
app.get('/', (req, res) => {
  const id = '32b3a9f5d8f33a8d'
  res.send(`
    <form method='GET' action='./update/${id}'>
      <button>Update Record</button>
    </form>
  `)
})
  
// Get route to show update form
app.get('/update/:id', async (req, res) => {
  const id = req.params.id
  const temp = await (updateTemplet({id}))
  res.send(temp)
})
  
// Post route to update record
app.post('/update/:id', async (req, res) => {
  const id = req.params.id
  const record = await repo.update(id, req.body)
  console.log(`Record Updated : 
    \n${JSON.stringify(record, null, 2)}`)
  res.send('Record Updated')
})
  
// Server setup
app.listen(port, () => {
  console.log(`Server start on port ${port}`)
})

Nombre de archivo: repository.js Este archivo contiene toda la lógica para actualizar un registro de base de datos personalizada.

// Importing node.js file system, crypto module 
const fs = require('fs')
  
class Repository {
  
    constructor(filename) {
  
        // The filename where datas are 
        // going to store
        if (!filename) {
            throw new Error('Filename is required'
                    + ' to create a datastore!')
        }
  
        this.filename = filename
  
        try {
            fs.accessSync(this.filename)
        } catch (err) {
  
            // If file not exist it is created
            // with empty array
            fs.writeFileSync(this.filename, '[]')
        }
    }
  
    // The findById method used in the example
    async findById(id) {
  
        // Read all filecontents of the datastore
        const jsonRecords = await 
            fs.promises.readFile(this.filename, {
            encoding: 'utf8'
        })
  
        // Parsing JSON records in javascript
        // object type records
        const objRecord = JSON.parse(jsonRecords)
  
        // Search for required record
        const requiredRecord = objRecord
            .find(record => record.id === id)
        return requiredRecord
    }
  
    // Update Method
    async update(id, attrs) {
  
        // Read all file contents of the datastore
        const jsonRecords = await 
            fs.promises.readFile(this.filename, {
            encoding: 'utf8'
        })
  
        // Parsing json records in javascript
        // object type records
        const records = JSON.parse(jsonRecords)
  
        // Find target record to update with id
        const record = records.find(
            eachRecord => eachRecord.id === id)
  
        // If given id not belongs to any
        // record in database
        if (!record) {
            throw new Error(`Id '${id}' not found`)
        }
  
        // Update record
        Object.assign(record, attrs)
  
        // Write all records back to the
        // custom database
        await fs.promises.writeFile(
            this.filename,
            JSON.stringify(records, null, 2)
        )
        return record
    }
}
  
// The 'datastore.json' file created at
// runtime if it not exist,  here we try
// to update information of database 
// that means database(datastore.json)
// already exist and there are also
// records in it.
module.exports = new Repository('datastore.json')

Nombre de archivo: updateRecordForm.js

const repo = require('./repository')
module.exports = async ({ id }) => {
    const record = await repo.findById(id)
    return `
    <div>
      <form method='POST'>
        <div>
          <div>
            <label id='email'>Username</label>
          </div>
          <input type='text' name='email' 
            value=${record.email} for='email'>
        </div>
        <div>
          <div>
            <label id='password'>Password</label>
          </div>
          <input type='password' name='password' 
            value=${record.password} 
          for='password'>
        </div>
        <div>
          <div>
            <label id='name'>Name</label>
          </div>
          <input type='text' name='name' 
            value=${record.name} for='name'>
        </div>
          <button>Update</button>
        </div>
      </form>
  </div>
  `
}

Nombre de archivo: paquete.json

archivo paquete.json

Ejecute el archivo index.js con el siguiente comando:

node index.js

Producción:

Pantalla de salida antes de hacer clic

Pantalla de salida después de hacer clic

Registro de actualización

Después de actualizar la pantalla de salida

Base de datos:

Base de datos antes de la actualización

Base de datos después de la actualización

Nota: Por primera vez, el archivo de la base de datos del programa (datastore.json) no existe en el directorio del proyecto, se creó dinámicamente después de ejecutar el programa. Pero aquí intentamos actualizar un registro en la base de datos, lo que significa que el programa se supone que ya se ejecutó una vez y algunos registros se agregan a la base de datos que intentamos actualizar.

Publicación traducida automáticamente

Artículo escrito por hunter__js y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *