nodejs mysql异步

发布于 2025-02-11 04:47:41 字数 599 浏览 1 评论 0原文

我正在尝试通过此端点从我的MySQL数据库返回我的用户列表。

问题在于它返回“未定义”。

你知道如何解决这个问题吗?

提前thx :)

app.get("/users", async (req, res) => {
  users = await query_my_users_from_db()
  // Got "users = undefined" here
  console.log(users)
  return JSON.stringify(users)
})

async function query_my_users_from_db() {
  var users = await db.query("SELECT * FROM `users`", function (err, result) {
    if (err) throw err
    users = Object.values(JSON.parse(JSON.stringify(result)))
    return users
  })
}

I'm trying to return my users list from my Mysql database through this endpoint.

The problem is that it return "undefined".

Do you know how to solv this?

Thx in advance :)

app.get("/users", async (req, res) => {
  users = await query_my_users_from_db()
  // Got "users = undefined" here
  console.log(users)
  return JSON.stringify(users)
})

async function query_my_users_from_db() {
  var users = await db.query("SELECT * FROM `users`", function (err, result) {
    if (err) throw err
    users = Object.values(JSON.parse(JSON.stringify(result)))
    return users
  })
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

深海少女心 2025-02-18 04:47:41

由于db.query是基于回调的,因此您应该将代码更改为:

function query_my_users_from_db(callback) {
   db.query("SELECT * FROM `users`", callback)
}

删除所有异步\等待,因为您不使用任何承诺!

然后定义您的回调

const usersHandler = (err, result) => {
 ... do what you want with your users ...
}

并使用它像这样:

query_my_users_from_db(usersHandler)

另一个选项是为mySQL使用一些基于承诺的包装程序包,有很多或使用Node util.promisify() https://www.geeksforgeeks.org/node-js-js-util-promisify-method/ )并完全删除回调。

希望它有帮助

Since db.query is callback based, you should change your code into:

function query_my_users_from_db(callback) {
   db.query("SELECT * FROM `users`", callback)
}

remove all the async\await since you are not using any promises!

then define your callback

const usersHandler = (err, result) => {
 ... do what you want with your users ...
}

and use it like this:

query_my_users_from_db(usersHandler)

Another option is to use some promise-based wrapper package for MySQL, there is plenty or use node util.promisify() (https://www.geeksforgeeks.org/node-js-util-promisify-method/) and then use async\await and remove the callback altogether.

Hope that it helps

蓝礼 2025-02-18 04:47:41

我使用了它,它像魅力一样工作。

db.promise = (sql, params) => {
      return new Promise((resolve, reject) => {
        db.query(sql, params, (err, result) => {
          if (err) {
            reject(new Error())
          } else {
            resolve(result)
          }
        })
      })
    }

    async function connection(query) {
      const result = await db.promise(query)
      return result
    }

    app.get("/users", async (req, res) => {
      users = await connection("SELECT * FROM `users`")
      return users
    })

I used this and it's working like a charm.

db.promise = (sql, params) => {
      return new Promise((resolve, reject) => {
        db.query(sql, params, (err, result) => {
          if (err) {
            reject(new Error())
          } else {
            resolve(result)
          }
        })
      })
    }

    async function connection(query) {
      const result = await db.promise(query)
      return result
    }

    app.get("/users", async (req, res) => {
      users = await connection("SELECT * FROM `users`")
      return users
    })
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文