es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Conecta Node.js a Microsoft SQL Server

Estaba siguiendo un tutorial y tengo algunos métodos en un controlador para obtener datos de una base de datos en SQL Server. Son métodos típicos de CRUD y en cada método he escrito lo siguiente:

let pool = await sql.connect(config);

Quiero optimizar el código y llamar a esto solo una vez y no en cada método, de modo que la conexión se establezca desde la primera vez que ejecuto el código.

Gracias de antemano.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para optimizar el código y establecer la conexión desde el primer momento en que se ejecuta el código, puedes crear un archivo de módulo separado para establecer la conexión a la base de datos del servidor de SQL. Este archivo puede exportar el objeto de la agrupación de conexiones, y otros módulos pueden importar este objeto para usarlo.

    Aquí tienes un ejemplo de cómo puedes crear dicho archivo:

    db.js

    const sql = require('mssql');
    const config = {
        user: 'nombredeusuario',
        password: 'contraseña',
        server: 'localhost',
        database: 'nombredb'
    };
    
    const poolPromise = new sql.ConnectionPool(config)
        .connect()
        .then(pool => {
            console.log('Conectado al servidor de SQL');
            return pool;
        })
        .catch(err => console.log('¡Falló la conexión a la base de datos! Configuración incorrecta: ', err));
    
    module.exports = {
        sql,
        poolPromise
    };
    

    Luego, puedes importar este módulo en tu controlador y usar el objeto poolPromise para ejecutar consultas de SQL:

    controller.js

    const { poolPromise } = require('./db');
    
    async function getUsers() {
        const pool = await poolPromise;
        const result = await pool.request().query('SELECT * FROM usuarios');
        return result.recordset;
    }
    
    async function addUser(nombre, correo) {
        const pool = await poolPromise;
        const result = await pool.request()
            .input('Name', nombre)
            .input('Email', correo)
            .query('INSERT INTO usuarios (Nombre, Correo) VALUES (@Nombre, @Correo)');
        return result.rowsAffected[0] === 1;
    }
    
    // Otros métodos CRUD...
    
    module.exports = {
        getUsers,
        addUser,
        // Otros métodos CRUD...
    };
    

    De esta manera, el objeto poolPromise solo se crea y se conecta a la base de datos del servidor de SQL una vez, y las consultas posteriores en tu aplicación pueden reutilizar el mismo objeto de agrupación de conexiones.

Comments are closed.