代码之家  ›  专栏  ›  技术社区  ›  Gvs Akhil

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

  •  -1
  • Gvs Akhil  · 技术社区  · 7 年前

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

    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();
                    }
                })
            }
        });
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   ellipsis    7 年前

    问题在于这个代码。 如果未找到错误,则使用 send() 方法。当另一个查询成功时 发送() 方法被调用,但这不起作用,因为 发送() 发送数据后结束连接。你可以跑 发送() 只有一次当一个连接被关闭时 发送() 不会起作用的。而是使用 res.write() ,它们本身不会关闭连接。 发送() 内部实施 恢复写入() 紧接着 res.end()

    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" });
                    }
                }
    

    代码应该是

      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()
                    }
                }