Search code examples
javascriptmysqlnode.jsnode-mysqlnodejs-server

Why do I get ReferenceError: insertId is not defined on my 4th MySQL Query in NodeJS?


Why am I able to get the insertId from the first MySQL query but not further on in the code on the fourth query? The query is somewhat complex, but I don't know why something which works the first time doesn't work later on in the code;

var mysql   = require("mysql");
var express = require("express");
var connection = require("../database")    

 var createAudiopost = function(req, res, next){
     
 var title = req.body.title;
 var userid = req.body.userid;
 var opid = req.body.opid; 
 var tag1 = req.body.tag1;
     
connection.beginTransaction(function(err) {
  if (err) { throw err; }
  
connection.query('INSERT INTO ?? (title,userid,opid) VALUES (?, ?, ? )', ['audioposts',title,userid,opid], function(err, result) {
     if (err) { 
      connection.rollback(function() {
        throw err;
      });
    }

    var audioname = userid + '-' + result.insertId + '.m4a';
    var newid = result.insertId;    
    console.log("newid: "  , newid  );
    
    connection.query('UPDATE ?? SET audioname=? WHERE audioid = ?',  ['audioposts',audioname,newid], function (error, result, fields) {
      if (err) { 
        connection.rollback(function() {
          throw err;
        });
      }  
      
      if (tag1)  {  
        connection.query('SELECT tagid FROM tags WHERE tagname = ?', [tag1], function (error, result, fields) {                     
                  if (err) { 
                    connection.rollback(function() {
                      throw err;
                    });
                            }

        if (result < 1) {    
            connection.query('INSERT INTO tags SET tagname = ?', [tag1], function (error, result, fields) {
                      if (err) { 
                    connection.rollback(function() {
                          throw err;
                            });
                                }   
                                
                        console.log("lets see this wierd error", result);                                                               
                        const tagInsertId = result.insertId;                            
                        
            connection.query("INSERT INTO entitytag SET audioid = ?, tagid = ?, userid = ?", [insertId, tagInsertId, userId], function (error, result, fields) {
                      if (err) { 
                        connection.rollback(function() {
                          throw err;
                            });
                              }  

                connection.commit(function(err) {
                if (err) { 
                  connection.rollback(function() {
                    throw err;
                  });
                }
                 console.log('success!');
                 newid = result.insertId;
                 res.json({
                                "title" : title, 
                                "userid" : userid,
                                "opid" : opid, 
                                "insertid": newid
                        }); //resjson success               
                    }); //commit                  
                }); // insert entitytags
            }); // insert tags              
          } // if row
          
          else {                
                const tagid1 = result.tagid;                            
                connection.query("INSERT INTO entitytag SET audioid = ?, tagid = ?, userid = ?", [insertId, tagid1, userId], function (error, result, fields) {           
              if (err) { 
                connection.rollback(function() {
                  throw err;
                        }); //err
                        } //err 

                connection.commit(function(err) {
                if (err) { 
                  connection.rollback(function() {
                    throw err;
                  });
                }
                 console.log('success!');
                 res.json({
                                "title" : title, 
                                "userid" : userid,
                                "opid" : opid, 
                                "insertid": newid
                        }); //resjson success               
              }); //commit                          
            })  // insert entitytag2
          }   
        }); //select tagid
      }//tag1
    }); //update
  }); //insert
}); //begin transaction
}   //createaudiopost

   module.exports = createAudiopost;

The code gets as far as;

 sql: "INSERT INTO tags SET tagname = 'dogmatism'" 

But then error I get straight afterwards is;

Parser.js:437
      throw err; // Rethrow non-MySQL errors
      ^    
ReferenceError: insertId is not defined

Solution

  • insertId is not defined but used in the following queries:

    connection.query("INSERT INTO entitytag SET audioid = ?, tagid = ?, userid = ?", [insertId, tagid1, userId], function (error, result, fields)
    

    Looks like you meant to use newid instead as per the usage in the query:

    connection.query('UPDATE ?? SET audioname=? WHERE audioid = ?',  ['audioposts',audioname,newid], function (error, result, fields)
    

    Replace the same here and it should work.

    connection.query("INSERT INTO entitytag SET audioid = ?, tagid = ?, userid = ?", [newid, tagid1, userId], function (error, result, fields)
    

    If not create a variable called insertId and initialise it before using it.