Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js查询插入回调未按预期工作_Javascript_Mysql_Node.js_Express - Fatal编程技术网

Javascript Node.js查询插入回调未按预期工作

Javascript Node.js查询插入回调未按预期工作,javascript,mysql,node.js,express,Javascript,Mysql,Node.js,Express,使用POST和添加插入时出现小问题。如下所示,但希望在插入数据后使用callball。目前正在更新数据库。(很好)但不能使用回调-我希望这刚好低于抛出错误。所以可以使用result.insertId。有什么想法吗 router.post('/group/:id',函数(req,res){ var idToken=req.params.id; admin.auth().verifyIdToken(idToken).then(函数(decodedToken){ var userID=decoded

使用POST和添加插入时出现小问题。如下所示,但希望在插入数据后使用callball。目前正在更新数据库。(很好)但不能使用回调-我希望这刚好低于抛出错误。所以可以使用result.insertId。有什么想法吗

router.post('/group/:id',函数(req,res){
var idToken=req.params.id;
admin.auth().verifyIdToken(idToken).then(函数(decodedToken){
var userID=decodedToken.uid;
变量名称=加密(请求主体组);
getID(用户id,函数(结果){
var ID=结果;
var post={ID:ID,name:name};
db.query(‘插入cu_组集合?’、post、函数(错误、结果、字段){
如果(错误)抛出错误;
//***当我在这里添加响应时,得到502坏网关错误。
});
res.sendStatus(200);
});//取决于getID
//admin.auth cat
}).catch(函数(错误){
res.sendStatus(错误);
});	
});请尝试以下方法:

router.post('/group/:id', function(req, res) {

        var idToken = req.params.id;
        admin.auth().verifyIdToken(idToken).then(function(decodedToken) {

                var userID = decodedToken.uid;
                var name = encrypt(req.body.group);

                getID(userID, function(result){

                    var ID = result;
                    var post  = {ID:ID, name:name};

                    db.query('INSERT INTO cu_groups SET ?', post, function (error, results, fields) {
                        if(error){
                            return res.status(500).send(error);
                        }
                        if(!error && results){
                            return res.status(200).send(results);
                        }

                    });

                }); 

      }).catch(function(error) {
          return res.status(500).send(error);
      });   

  });
如果要使用回调函数,请创建一个单独的函数,如:

var insertData = function(query,data,callback){
          db.query(query, data, function (error, results, fields) {
               if(error){callback(error,null);}
               if(!error && results){callback(null,results);}
          });
});
并在getID中以这种方式调用:

     getID(userID, function(result){

                var ID = result;
                var post  = {ID:ID, name:name};

                insertData('INSERT INTO cu_groups SET ?', post, function (error,data){
                    if(error){
                        return res.status(500).send(error);
                    }
                    if(data){
                        return res.status(200).send(data);
                    }
                });

            }); 

下面的工作代码非常感谢Saurabh Mistry。我删除了SET post,并明确地添加了表字段和值

router.post('/group/:id',函数(req,res){
var idToken=req.params.id;
admin.auth().verifyIdToken(idToken).then(函数(decodedToken){
var userID=decodedToken.uid;
变量名称=加密(请求主体组);
getID(用户id,函数(结果){
var ID=结果;
//质疑
let query=“在cu_组(ID,name)中插入值(“+ID+”,“+name+”)”;
//执行查询
db.query(查询,(错误,结果)=>{
如果(错误){
返回res.status(500)。发送(错误);
}
如果(!错误和结果(&R)){
返回res.send(结果);
}
});
});//取决于getID
//admin.auth cat
}).catch(函数(错误){
返回res.status(500)。发送(错误);
});	

});我使用了没有回调的代码,它返回了一个500错误。尽管数据保存在数据库中。我甚至对变量进行了硬编码,所以它所需要做的就是插入数据(确实如此),然后返回错误500?谢谢你的帮助。我猜在查询之前数据库没有及时连接?处理查询后,已返回响应错误。