插入节点mysql时如何select行[0]?
How to select rows[0] while inserting in node-mysql?
我对 nodejs 和回调还很陌生。这是我的问题,使用 passportJS 的 LocalStrategy 和 node-mysql :
exports.register = new LocalStrategy(strategyOptionsRegister, function(req, username, password, done) {
//get data from the request
var data = {
username: username,
email: req.body.email,
password: password
};
console.log('data : ', data);
//Hash passwords
bcrypt.genSalt(10, function(err, salt) {
if (err) return next(err);
bcrypt.hash(password, salt, null, function(err, hash) {
// Store hash in your password DB.
if (err) return next(err);
data.password = hash;
//insertion
connection.query('INSERT INTO USERS SET ?', data, function(err, rows) {
if (err) {
console.log(err);
return next("Mysql error, check your query");
}
return done(null, rows[0]);
});
});
});
});
我正在尝试 return 行 [0] 包含所有数据,但我不知道我应该如何执行 SELECT 命令?是在插入回调之前还是之后?目前,rows[0] 自然是未定义的。
使用 async.waterfall 怎么样?
我解决了类似的问题。
- 插入查询
- 从行[0]
中获取auto_incremnet个数
- select查询
异步网站在这里
https://github.com/caolan/async#waterfall
此外,由于 bcrypt 是异步的,
data,password = hash
此代码无法正常工作。
我想为你执行相同类型的代码,但我不能。
因此,我在 Sync 中使用 bcrypt 并将哈希传递给查询。
这是我的解决方案:
exports.register = new LocalStrategy(strategyOptionsRegister, function(req, username, password, done) {
//get data from the request
var data = {
username: username,
email: req.body.email,
password: password
};
//Hash passwords
bcrypt.genSalt(10, function(err, salt) {
if (err) {
return done(err);
}
// Store hash in your password DB.
bcrypt.hash(password, salt, null, function(err, hash) {
if (err) {
return done(err);
}
data.password = hash;
//insertion
connection.query('INSERT INTO USERS SET ?', data, function(err, rows) {
if (err) {
return done(null, false, {
message: 'Mysql error, check your query !'
});
}
// to return all the info in rows[0]
connection.query('SELECT * FROM USERS WHERE email = ?', data.email, function(err, rows) {
if (err) {
return done(null, false, {
message: 'Email not found !'
});
}
return done(null, rows[0]);
});
});
});
});
});
我对 nodejs 和回调还很陌生。这是我的问题,使用 passportJS 的 LocalStrategy 和 node-mysql :
exports.register = new LocalStrategy(strategyOptionsRegister, function(req, username, password, done) {
//get data from the request
var data = {
username: username,
email: req.body.email,
password: password
};
console.log('data : ', data);
//Hash passwords
bcrypt.genSalt(10, function(err, salt) {
if (err) return next(err);
bcrypt.hash(password, salt, null, function(err, hash) {
// Store hash in your password DB.
if (err) return next(err);
data.password = hash;
//insertion
connection.query('INSERT INTO USERS SET ?', data, function(err, rows) {
if (err) {
console.log(err);
return next("Mysql error, check your query");
}
return done(null, rows[0]);
});
});
});
});
我正在尝试 return 行 [0] 包含所有数据,但我不知道我应该如何执行 SELECT 命令?是在插入回调之前还是之后?目前,rows[0] 自然是未定义的。
使用 async.waterfall 怎么样?
我解决了类似的问题。
- 插入查询
- 从行[0] 中获取auto_incremnet个数
- select查询
异步网站在这里 https://github.com/caolan/async#waterfall
此外,由于 bcrypt 是异步的,
data,password = hash
此代码无法正常工作。
我想为你执行相同类型的代码,但我不能。 因此,我在 Sync 中使用 bcrypt 并将哈希传递给查询。
这是我的解决方案:
exports.register = new LocalStrategy(strategyOptionsRegister, function(req, username, password, done) {
//get data from the request
var data = {
username: username,
email: req.body.email,
password: password
};
//Hash passwords
bcrypt.genSalt(10, function(err, salt) {
if (err) {
return done(err);
}
// Store hash in your password DB.
bcrypt.hash(password, salt, null, function(err, hash) {
if (err) {
return done(err);
}
data.password = hash;
//insertion
connection.query('INSERT INTO USERS SET ?', data, function(err, rows) {
if (err) {
return done(null, false, {
message: 'Mysql error, check your query !'
});
}
// to return all the info in rows[0]
connection.query('SELECT * FROM USERS WHERE email = ?', data.email, function(err, rows) {
if (err) {
return done(null, false, {
message: 'Email not found !'
});
}
return done(null, rows[0]);
});
});
});
});
});