Javascript 我需要运行两个查询
我有一个应用程序,在该应用程序中,我将使用标识符在数据库中输入一条新记录 我的第一条语句是一条if语句,它包装了整个文档:Javascript 我需要运行两个查询,javascript,mysql,sql,node.js,Javascript,Mysql,Sql,Node.js,我有一个应用程序,在该应用程序中,我将使用标识符在数据库中输入一条新记录 我的第一条语句是一条if语句,它包装了整个文档: if(body['id']&&body['business']&&body['contact_no']&&body['contact_email']&&body['addr_1']&&body['addr_2']&&body['post_code']&&body['gs_unit']&&body['gs_unit']时区]){ (一切都在这里) } 上面的if语句只是确保
if(body['id']&&body['business']&&body['contact_no']&&body['contact_email']&&body['addr_1']&&body['addr_2']&&body['post_code']&&body['gs_unit']&&body['gs_unit']时区]){
(一切都在这里)
}
上面的if语句只是确保所有内容都有一个值(或者它存在)
下一步是运行查询,检查是否使用该id注册了内容:
var sql1=“从epas_plc中选择*,其中uid=?”;
conn.query(sql1,[id],函数(err1,resp1){
控制台日志(响应1.长度);
var rlength=resp1.length;
如果(resp1.length==1){
res.send({'status':'error','information':'id已经存在'});
返回;
}
});
上面的查询有效,如果存在匹配项,将给出列出的响应。
如果不存在上述查询中定义的匹配项,rlength
,则应执行下一个查询:
if(rlength==0){
var sql=“插入epas_plc(uid、业务、联系人编号、联系人电子邮件、地址1、地址2、邮政编码、gs_单位、时区)的值(?,,,,,,,,,?)”;
连接查询(sql[id,body['business']、body['contact_no']、body['contact_email']、body['addr_1']、body['addr_2']、body['post_code']、body['gs_unit']、body['timezone']、函数(错误、响应){
如果(错误)抛出错误;
res.send({'status':'success','information':'已成功创建id为'+req.body.id}的条目);
})
}
不幸的是,这不起作用,因为无法在发送邮件后设置邮件头。
是否有人知道如何解决此问题,和/或有嵌套查询
编辑:SQL模块是MYSQL我认为您遇到的问题与“范围”和“异步”相关 第一,范围: 这里的“范围”问题是
var rlength=resp1.length代码>在第一个查询的函数中声明
这意味着如果两个查询相互内联,如:
conn.query(sql1,[id], function (err1, resp1) {
// ...
var rlength = resp1.length;
// ...
});
// You will find that 'rlength' is not defined
// console.log(typeof rlength);
if (rlength == 0) {
// ...
}
通过将“if语句”放置在第一个查询函数中,可以解决此问题,如下所示:
conn.query(sql1,[id], function (err1, resp1) {
// ...
var rlength = resp1.length;
// ...
if (rlength == 0) {
// ...
}
});
第二,异步
如果代码的结构是这样的,那么这个问题就不那么明显了:
conn.query(sql1,[id], function (err1, resp1) {
// ...
});
if (rlength == 0) {
// ...
}
“if语句”将独立于查询是否完成而执行。这意味着“if语句”可以在查询之前执行。我可以看到您的代码中存在一些问题,例如发送语句之后的返回,以及何时检查错误。我提出这一解决办法:
var sql1 = "SELECT * FROM epas_plc WHERE uid = ?";
conn.query(sql1, [id], function(err1, resp1) {
console.log(resp1.length);
var rlength = resp1.length;
if (err1) res.status(500).send({
'msg': 'error found'
});
if (rlength == 1) {
res.send({
'status': 'error',
'information': 'id already exsists'
});
} else {
var sql = "INSERT INTO epas_plc (uid, business, contact_no, contact_email, addr_1, addr_2, post_code, gs_unit, timezone) VALUES(?,?,?,?,?,?,?,?,?)";
conn.query(sql, [id, body['business'], body['contact_no'], body['contact_email'], body['addr_1'], body['addr_2'], body['post_code'], body['gs_unit'], body['timezone']], function(error, response) {
if (error) res.status(500).send({
'msg': 'error found'
});
res.send({
'status': 'success',
'information': 'successfully created entry with id: ' + req.body.id
});
})
}
});
保持代码清晰很重要,使用var rllength=resp1.length没有意义代码>并在使用if(resp1.length==1)检查之后{
。当发现一些错误时,您可以将其发送给调用它的人,因为它在请求范围内。您使用的是哪个SQL模块?@scagood MYSQL。很抱歉没有在问题中包含这些,我已对其进行了编辑以包含这些错误。我可以在您的代码中看到一些问题,例如发送后返回的问题以及何时检查错误,因此您可以你可以这样做吗?你应该可以通过@LucasCosta来完成这个请求谢谢!很棒的代码,谢谢你帮我解决它!