La forma más rápida de obtener el objeto JSON en mysql usando el nodo

¿Usando un ejemplo anterior? ¿Cómo podría insertar / actualizar una tabla mysql usando
un objeto JSON sin nombrar manualmente los encabezados de columna de la tabla? Y asegurarlo asíncrono.

var mysql = require('node-mysql'); var conn = mysql.createConnection({ ... }); var values = [ {name:'demian', email: 'demian@gmail.com', ID: 1}, {name:'john' , email: 'john@gmail.com' , ID: 2}, {name:'mark' , email: 'mark@gmail.com' , ID: 3}, {name:'pete ' , email: 'pete@gmail.com' , ID: 4} ]; // var sql = "INSERT INTO Test (name, email, n) VALUES ?"; conn.query(sql, [values], function(err) { if (err) throw err; conn.end(); }) 

Podrías hacer algo como esto:

 for(var i = 0; i < values.length; i++){ var post = values[i] var query = connection.query('INSERT INTO posts SET ?', post, function(err, result) { // Finish }); } 

EDITAR

Así es como se insertan múltiples 'publicaciones' a la vez.

 INSERT INTO posts (type, details) VALUES ('Helen', 24), ('Katrina', 21), 

Tendrías que recorrer el primer valor para obtener nombres como este.

 var names = []; for(name in values[0]){ names.push(name); // That would give you name, email, id } 

Entonces tendrías que crear tu propia cadena para insertar.

 var newvalues = []; for(var i = 0; i < values.length; i++){ newvalues.push('(' + values[i].join(',') + ')'); } 

Luego para ejecutar la consulta:

 connection.query('INSERT INTO posts (' + names.join(',') + ') VALUES ' + newvalues.join(',') , function(err, rows, fields) { // Result }); 

Tendrías que probar el código tú mismo, así es como lo harías.

Mira la parte de ‘Formato personalizado’ aquí . Si observa, este ejemplo utiliza marcadores de posición con nombre en la consulta, lo que le permite pasar un objeto y los marcadores de posición se reemplazan con los atributos coincidentes del objeto. También he pegado la sección correspondiente para mayor claridad:

 connection.config.queryFormat = function (query, values) { if (!values) return query; return query.replace(/\:(\w+)/g, function (txt, key) { if (values.hasOwnProperty(key)) { return this.escape(values[key]); } return txt; }.bind(this)); }; connection.query("UPDATE posts SET title = :title", { title: "Hello MySQL" }); 

Podría crear una pequeña función que asigne una matriz con ese formato a una statement de inserción.

Puede recorrer fácilmente los campos y usar alguna concatenación de cadenas.

La mejor opción es (usando la conexión MySQL):

 app.get('/yourcontroller/:id', function (req, res) { var id = req.params.id; var dataUpdate = req.body; connection.query( 'UPDATE yourtable SET ? Where ID = ?', [dataUpdate, id], function (err, result) { if (err) throw err; console.log('Updated data ! Changed ' + result.changedRows + ' rows'); } ); });