我正在尝试完成mysql和express的登录功能。我有一个work_id和一个user_password,我想使用work_id查找该用户是否存在于我的数据库中。我使用promise来做到这一点,我可以在控制台中记录所选的用户信息,但是promise始终处于未决状态,并且Webstorm控制台没有终止。 我想要的是诺言中的布尔值,无论用户是否存在。 这是我的代码: query.js。
const pool = require('./connect');
module.exports = {
query: function (sqlString, params) {
return new Promise((resolve, reject) => {
pool.getConnection(function (err, connection) {
if (err) {
reject(err)
} else {
connection.query(sqlString, params, (err, rows) => {
if (err) {
reject(err)
} else {
resolve(rows)
}
connection.release()
})
}
})
})
}
}
sqlCRUD.js,关于sql语句
const user = {
queryByWorkId: 'select * from user_info where work_id=?',
queryAll: 'select * from user_info',
resetPassword: 'update user_info set user_password = ? where work_id = ?',
};
user.js,我在这里执行测试。
const Model = require('./main')
const crypto = require('crypto')
const _ = require('./query')
const $sqlQuery = require('./sqlCRUD').user
class User{
// others
static findOne(form={}) {
const { work_id, user_password } = form
return _.query($sqlQuery.queryByWorkId, work_id)
.then(res => {
console.log(res)
if (res.length > 0) {
const u = res[0]
return u
}
return false
})
.catch(err => {
console.log('User.findOne error', err)
return {
errmsg: JSON.stringify(err)
}
})
}
这是我在user.js中的测试
const test = () => {
const form = {
work_id: '007',
user_password: 'root',
}
const r = User.findOne(form)
console.log('r', r)
}
这是输出: I am not allowed to embed a picture here, so SO generates a link
我对此感到困惑:在我的query.js文件中,我在User.findOne(form = {})方法中返回一个promise,然后用then捕获它, 返回_.query($ sqlQuery.queryByWorkId,work_id).then(res => console.log(res))。catch(err => console.log(err)),但是控制台没有终止,我只是得到了一个承诺{}。
我的代码有什么问题?使用mysql选择数据时,如何从promise中的then子句返回的值?预先感谢。