Conexión de Node.js a MySQL

En este capítulo, presentaremos cómo usar Node.js para conectarse a MySQL y operar la base de datos.

Si aún no tienes conocimientos básicos de MySQL, puedes consultar nuestro tutorial:Tutorial de MySQL。

El archivo SQL de la tabla Websites utilizado en este tutorial:websites.sql.

Instalar el controlador

Este tutorial utilizael comando cnpm personalizado de Taobaopara instalar:

$ cnpm install mysql

Conectar a la base de datos

En el siguiente ejemplo, modifica el nombre de usuario, la contraseña y el nombre de la base de datos según tu configuración real:

Código del archivo test.js:

var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '123456', database : 'test' }); connection.connect(); connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) { if (error) throw error; console.log('The solution is: ', results[0].solution); });

El resultado de ejecutar el siguiente comando es:

$ node test.js
The solution is: 2

Descripción de los parámetros de conexión a la base de datos:

ParámetroDescripción
hostDirección del host (por defecto: localhost)
  userNombre de usuario
  passwordContraseña
  portNúmero de puerto (por defecto: 3306)
  databaseNombre de la base de datos
  charsetConjunto de caracteres de conexión (por defecto: 'UTF8_GENERAL_CI', ten en cuenta que las letras del conjunto de caracteres deben estar en mayúsculas)
  localAddressEsta IP se utiliza para la conexión TCP (opcional)
  socketPathConectar a una ruta de dominio Unix; se ignora cuando se usan host y puerto
  timezoneZona horaria (por defecto: 'local')
  connectTimeoutTiempo de espera de conexión (por defecto: sin límite; unidad: milisegundos)
  stringifyObjectsSi serializar objetos
  typeCastSi convertir los valores de las columnas en tipos nativos de JavaScript (por defecto: true)
  queryFormatMétodo personalizado de formato de sentencias de consulta (query)
  supportBigNumbersCuando la base de datos admita columnas de tipo bigint o decimal, debe establecer esta opción en true (por defecto: false)
  bigNumberStringsCon supportBigNumbers y bigNumberStrings habilitados, fuerza que las columnas bigint o decimal se devuelvan como cadenas de JavaScript (por defecto: false)
  dateStringsFuerza que los tipos timestamp, datetime y date se devuelvan como cadenas, en lugar de como tipo Date de JavaScript (por defecto: false)
  debugActivar depuración (por defecto: false)
  multipleStatementsSi permite múltiples sentencias MySQL en una consulta (por defecto: false)
  flagsSe utiliza para modificar los indicadores de conexión
  sslUsa el parámetro ssl (con el mismo formato de parámetros que crypto.createCredenitals) o una cadena que contenga el nombre de un archivo de configuración ssl; actualmente solo se incluyen los archivos de configuración de Amazon RDS

Para más información, consulte:https://github.com/mysqljs/mysql


Operaciones de base de datos (CURD)

Antes de realizar operaciones en la base de datos, debes tomar el archivo SQL de la tabla Websites proporcionado en este sitiowebsites.sqle importarlo en tu base de datos MySQL.

En este tutorial, el usuario de MySQL es root, la contraseña es 123456 y la base de datos es test; debes modificarlos según tu propia configuración.

Consultar datos

Después de importar a la base de datos el archivo SQL proporcionado anteriormente, ejecuta el siguiente código para consultar los datos:

Consultar datos

var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '123456', port: '3306', database: 'test' }); connection.connect(); var sql = 'SELECT * FROM websites'; //Consultar connection.query(sql,function (err, result) { if(err){ console.log('[SELECT ERROR] - ',err.message); return; } console.log('--------------------------SELECT----------------------------'); console.log(result); console.log('------------------------------------------------------------\n\n'); }); connection.end();

El resultado de ejecutar el siguiente comando es:

$ node test.js
--------------------------SELECT----------------------------
[ RowDataPacket {
    id: 1,
    name: 'Google',
    url: 'https://www.google.cm/',
    alexa: 1,
    country: 'USA' },
  RowDataPacket {
    id: 2,
    name: '淘宝',
    url: 'https://www.taobao.com/',
    alexa: 13,
    country: 'CN' },
  RowDataPacket {
    id: 3,
    name: 'Ejemplo',
    url: 'http://www.example.com/',
    alexa: 4689,
    country: 'CN' },
  RowDataPacket {
    id: 4,
    name: '微博',
    url: 'http://weibo.com/',
    alexa: 20,
    country: 'CN' },
  RowDataPacket {
    id: 5,
    name: 'Facebook',
    url: 'https://www.facebook.com/',
    alexa: 3,
    country: 'USA' } ]
------------------------------------------------------------

Insertar datos

Podemos insertar datos en la tabla websties:

Insertar datos

var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '123456', port: '3306', database: 'test' }); connection.connect(); var addSql = 'INSERT INTO websites(Id,name,url,alexa,country) VALUES(0,?,?,?,?)'; var addSqlParams = ['Herramientas de Ejemplo', 'https://c.example.com','23453', 'CN']; //Agregar connection.query(addSql,addSqlParams,function (err, result) { if(err){ console.log('[INSERT ERROR] - ',err.message); return; } console.log('--------------------------INSERT----------------------------'); //console.log('INSERT ID:',result.insertId); console.log('INSERT ID:',result); console.log('-----------------------------------------------------------------\n\n'); }); connection.end();

El resultado de ejecutar el siguiente comando es:

$ node test.js
--------------------------INSERT----------------------------
INSERT ID: OkPacket {
  fieldCount: 0,
  affectedRows: 1,
  insertId: 6,
  serverStatus: 2,
  warningCount: 0,
  message: '',
  protocol41: true,
  changedRows: 0 }
-----------------------------------------------------------------

Después de una ejecución exitosa, consulta la tabla de datos y podrás ver los datos añadidos:

Actualizar datos

También podemos modificar los datos de la base de datos:

Actualizar datos

var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '123456', port: '3306', database: 'test' }); connection.connect(); var modSql = 'UPDATE websites SET name = ?,url = ? WHERE Id = ?'; var modSqlParams = ['Sitio móvil de Ejemplo', 'https://m.example.com',6]; //Modificar connection.query(modSql,modSqlParams,function (err, result) { if(err){ console.log('[UPDATE ERROR] - ',err.message); return; } console.log('--------------------------UPDATE----------------------------'); console.log('UPDATE affectedRows',result.affectedRows); console.log('-----------------------------------------------------------------\n\n'); }); connection.end();

El resultado de ejecutar el siguiente comando es:

--------------------------UPDATE----------------------------
UPDATE affectedRows 1
-----------------------------------------------------------------

Después de una ejecución exitosa, consulta la tabla de datos y podrás ver los datos actualizados:

Eliminar datos

Podemos usar el siguiente código para eliminar los datos con id 6:

Eliminar datos

var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '123456', port: '3306', database: 'test' }); connection.connect(); var delSql = 'DELETE FROM websites where id=6'; //Eliminar connection.query(delSql,function (err, result) { if(err){ console.log('[DELETE ERROR] - ',err.message); return; } console.log('--------------------------DELETE----------------------------'); console.log('DELETE affectedRows',result.affectedRows); console.log('-----------------------------------------------------------------\n\n'); }); connection.end();

El resultado de ejecutar el siguiente comando es:

--------------------------DELETE----------------------------
DELETE affectedRows 1
-----------------------------------------------------------------

Después de una ejecución exitosa, consulta la tabla de datos y podrás ver que los datos con id=6 han sido eliminados:

Otras extensiones