为什么我在 NodeJS 中的第 4 个 MySQL 查询中出现 ReferenceError:insertId 未定义?

问题描述

为什么我可以从第一个 MysqL 查询获取 insertId,而在第四个查询代码中却无法获取查询有点复杂,但我不知道为什么第一次起作用的东西在代码中后来不起作用;

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,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 = ?',audioname,newid],function (error,result,fields) {
      if (err) { 
        connection.rollback(function() {
          throw err;
        });
      }  
      
      if (tag1)  {  
        connection.query('SELECT tagid FROM tags WHERE tagname = ?',[tag1],fields) {                     
                  if (err) { 
                    connection.rollback(function() {
                      throw err;
                    });
                            }

        if (result < 1) {    
            connection.query('INSERT INTO tags SET tagname = ?',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],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 = ?,tagid1,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,"insertid": newid
                        }); //resjson success               
              }); //commit                          
            })  // insert entitytag2
          }   
        }); //select tagid
      }//tag1
    }); //update
  }); //insert
}); //begin transaction
}   //createaudiopost

   module.exports = createAudiopost;

代码就到了;

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

但后来我直接得到的错误是;

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

解决方法

insertId 未定义但用于以下查询:

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

看起来您打算根据查询中的用法改用 newid

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

在这里替换相同的,它应该可以工作。

connection.query("INSERT INTO entitytag SET audioid = ?,[newid,fields)

如果没有创建一个名为 insertId 的变量并在使用前初始化它。