使用nodejs链接mysql,外界怎么获取值

代码是这样的

 const select = function () {
    let sql = 'SELECT * FROM wdata';
     connection.query(sql,function (err, result) {
        if(err){
          console.log('[SELECT ERROR] - ',err.message);
          return;
        }
       console.log("查询结果为",result);
    //   return result 
    });
    
};
let data = select()
console.log(data,'data')

现在想要获取result返回的结果值,是通怎样的方式获取呢?

阅读 1.9k
2 个回答

看你的意思,你想问应该是怎么异步拿到最终的结果:

你这个是通过回调函数获取结果:改一下

const select = function () {
return new Promise(function(resolve, reject){
    let sql = 'SELECT * FROM wdata';
    connection.query(sql,function (err, result) {
        if(err){
            console.log('[SELECT ERROR] - ',err.message);
            reject(err)
            return;
        }
        
        console.log("查询结果为",result);
    //   return result 
        resolve(result)
    });
})

};

你数据库连接用的是什么库,Sequelize?还是什么?
connection.query 看下这个API有没有返回 Promise 的,可以直接使用

const select = async function () {
    let sql = 'SELECT * FROM wdata';
    let res = await connection.query(sql);
    return res;
}

和上面的写法等价,但是更清晰

获取方式1:

select().then(function(data){
    console.log(data,'data')
}).catch(function(err){
    console.log(err)
})

获取方式2:

async function get(){
    try {
        let data = await select();
        console.log(data,'data')
    } catch (error) {
        console.log(error)
    }
}
get()

nodejs配置路由,然后在前端请求这个路由即可,但是你这里少了一些内容,nodejs(我用的express框架)最后一步是将数据响应回前端,也就是暴露给前端,通过请求路由之后就能得到返回的数据,我给你贴一段我的代码,

封装的操作数据的文件:

const mysql = require('mysql')
// 配置数据库基础参数
const conn = mysql.createConnection({
  host: 'localhost', // 地址
  user: 'root', // 数据库用户名
  password: '', // 数据库密码
  database: 'BMS_db' // 数据库名
})

// 连接数据库
conn.connect()

// 封装操作数据库的函数
function sqlFn(sql, arr, callback) {
  conn.query(sql, arr, (err, res) => {
    if (err) {
      console.log(err)
      return
    }
    callback(res)
  })
}

module.exports = sqlFn

路由配置文件:

const express = require('express')
const router = express.Router()
const sqlFn = require('./mysqlConnect') // 引入封装过的数据库操作函数

// 获取所有商品内容
router.post('/getProducts', (req, res) => {
  const sql = 'select * from product_data'
  sqlFn(sql, null, result => {
    res.send({
      status: 200,
      msg: '获取所有数据!',
      result
    })
  })
})

上一段代码段(我只贴了我部分的代码,一个最简单的查询所有数据的)中最终能让前端获取到数据的操作是那个res.send()send方法中传入一个对象,而对象中所有的内容都可以在前端通过请求/getProducts这个路由之后获取到
image.png
你这段代码之后还要配置好post或者get请求的路由,然后利用res(也就是response)的send方法将获取到的数据暴露给客户端就行了。

有其他不懂的可以再问哈,根据你描述的我只能回答这么多了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题