Mysql Nodejs-数据被插入,但我没有得到响应
我在Nodejs中使用mysql,我的要求是检查用户是否存在,如果用户不存在,我们应该创建该用户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
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.nieseTheres.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()
}
}