Search code examples
javascriptmysqlnode.jsnode-mysql

Ways to do a dynamic query in node.js


I'm trying to figure out how to do dynamic queries in node.js with node-mysql. Which table and fields to insert and update is based on users' request from the data object. I thought of creating a module to store different queries like the following but no luck. It gave me this error:

TypeError: Object function (){
   var likes = 'INSERT IGNORE INTO item (id,like_type) VALUES(?,?)';
   return likes;
 } has no method 'replace'

app.js

 var queries = require('./queries');
 .....

 socket.on("like",function(data){ 
  var table_file = data[0].table;
  var d = data[1];  
  connection.query(queries[table_file]
    ,[d.id,d.like_type],function(err,rows,fields){ 
     if(err){ throw err;}
     console.log(rows);
    });

queries.js:

module.exports = {
 item_like:function(){
   var likes = 'INSERT IGNORE INTO item (id,like_type) VALUES(?,?)';
   return likes;
 },
 people:function(){
   var likes = 'INSERT IGNORE INTO people (id,like_type) VALUES(?,?)';
   return likes;
 }
}

Here's the data object sent to socket:

data object: {table:item_like},{id:1,like_type:1};

Solution

  • Change your exports in queries.js to be set to the SQL strings instead of functions, since that is how you're treating them currently:

    module.exports = {
     item_like: 'INSERT IGNORE INTO item (id,like_type) VALUES(?,?)',
     people: 'INSERT IGNORE INTO people (id,like_type) VALUES(?,?)'
    }