使用mysql选择数据时,如何从then子句返回值

时间:2018-07-29 03:32:47

标签: node.js express promise

我正在尝试完成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子句返回的值?预先感谢。

0 个答案:

没有答案