Javascript Node.js查询插入回调未按预期工作
使用POST和添加插入时出现小问题。如下所示,但希望在插入数据后使用callball。目前正在更新数据库。(很好)但不能使用回调-我希望这刚好低于抛出错误。所以可以使用result.insertId。有什么想法吗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
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?谢谢你的帮助。我猜在查询之前数据库没有及时连接?处理查询后,已返回响应错误。