Mysql Nodejs-数据被插入,但我没有得到响应

Mysql Nodejs-数据被插入,但我没有得到响应,mysql,node.js,express,Mysql,Node.js,Express,我在Nodejs中使用mysql,我的要求是检查用户是否存在,如果用户不存在,我们应该创建该用户 router.post('/signup', (req, res) => { var name = req.body.name; var phone = req.body.phone; var password = req.body.password; var datecreated = req.body.datecreated; var dateupd

我在Nodejs中使用mysql,我的要求是检查用户是否存在,如果用户不存在,我们应该创建该用户

router.post('/signup', (req, res) => {
    var name = req.body.name;
    var phone = req.body.phone;
    var password = req.body.password;
    var datecreated = req.body.datecreated;
    var dateupdated = req.body.dateupdated;

    db.query("select * from users where name='" + name + "' and password='" + password + "'", (error, rows) => {
        if (error) {
            res.send({ "status": "failure", "Error": error });
        }
        else if (rows.length > 0) {
            res.send({ "status": "exists" });
        }
        else {
            db.query("insert into users(name, password, phone, datecreated, dateupdated) values('" + name + "', '" + password + "', '" + phone + "', '" + datecreated + "', '" + dateupdated + "')"), (error, rows) => {
                if (error) {
                    res.send({ "status": "failure", "Error": error });
                }
                else {
                    res.send({ "status": "success" });
                }
            }
        }
    });
});
在这里,如果用户存在,我将得到作为状态的响应,但如果我发送新用户,则数据将被插入,但我没有得到响应。需要一些帮助

工作解决方案:

db.query("select * from users where name='" + name + "' and password='" + password + "'", (error, rows) => {
        if (error) {
            res.send({ "status": "failure", "Error": error });
        }
        else if (rows.length > 0) {
            res.send({ "status": "exists" });
        }
        else {
            db.query("insert into users(name, password, phone, datecreated, dateupdated) values('" + name + "', '" + password + "', '" + phone + "', '" + datecreated + "', '" + dateupdated + "')", (error, rows) => {
                if (error) {
                    res.send({ "status": "failure", "Error": error });
                    res.end();
                }
                else {
                    res.send({ "status": "success" });
                    res.end();
                }
            })
        }
    });

问题在于这段代码。 如果未发现错误,则使用
send()
方法发送行数。当另一个查询成功时,会调用另一个
send()
方法,但该方法不起作用,因为
send()
在发送数据后会结束连接。您只能运行一次
send()
,因为当连接关闭时,其他
send()
将不起作用。而是使用
res.write()
,这不会关闭连接本身
send()
内部实现
res.write()
紧接着
res.end()

代码应该是

  if (error) {
            res.write({ "status": "failure", "Error": error });
        }
        else if (rows.length > 0) {
            res.write({ "status": "exists" });
        }
        else {
            db.query("insert into users(name, password, phone, datecreated, dateupdated) values('" + name + "', '" + password + "', '" + phone + "', '" + datecreated + "', '" + dateupdated + "')"), (error, rows) => {
                if (error) {
                    res.write({ "status": "failure", "Error": error });
                    res.end()
                }
                else {
                    res.write({ "status": "success" });
                    res.end()
                }
            }

谢谢,修复成功了,但还需要一个修复我关闭了第二个db.query。感谢您的详细解释。如果这有助于您升级投票并将其标记为正确,那么它可以帮助
db.query的其他tooThe回调(
只调用一次,
res.send
都由
if-else if-else
块分隔。在什么情况下,函数
res.send
会被调用两次?响应`res.write({“状态”:“失败”,“错误”:错误})`没有匹配的
end
,即使您的声明是正确的,那么发送两个串联的json编码字符串也没有任何意义。其中?如果
if(error){
的计算结果为true,则
res.send({“status”:“failure”,“error”:error})
不再执行任何操作。如果没有错误,则
如果(rows.length>0)
为true,则调用
res.send({“status”:“exists”})
,不再执行任何操作。如果
rows.length
0
,则调用
else{
应用,
插入
查询完成。该回调只有一个
if-else
块,因此对于一个请求,
res.send
不可能被调用两次。不要在问题中使用解决方案。或者使用解决方案创建答案(如果不存在提供解决方案的其他答案,或者如果您认为有一个更完整的解决方案),或者接受提供解决方案的现有答案。确定@t.nieseThe
res.end()
不应该有任何区别,您使用什么版本的express和mysql模块?我使用的是express 4.16.3和nodejs 8.11.3
  if (error) {
            res.write({ "status": "failure", "Error": error });
        }
        else if (rows.length > 0) {
            res.write({ "status": "exists" });
        }
        else {
            db.query("insert into users(name, password, phone, datecreated, dateupdated) values('" + name + "', '" + password + "', '" + phone + "', '" + datecreated + "', '" + dateupdated + "')"), (error, rows) => {
                if (error) {
                    res.write({ "status": "failure", "Error": error });
                    res.end()
                }
                else {
                    res.write({ "status": "success" });
                    res.end()
                }
            }