首页 > 解决方案 > 在另一个文件中访问 MySQL 的输出

问题描述

我想从包含查询的函数中访问变量“结果”。当我想从另一个文件访问它时,我试图在 POST 请求后处理输出,该变量被声明为“未定义”。

这是我执行查询的文件:

const db = require('../db/connect'); 

module.exports = {

getID(name){
db.query(`SELECT CWID FROM user WHERE surname = '${name}'`, function(error, result, fields){
   if(error) console.log(error); 
   console.log(result);
       }); 
    }
}

这是我要处理数据的文件:

router.post('/test', function(req, res){
  const data = queries.getID(req.body.name); 
  console.log(data);
  res.render('new test', {title: "test"}); 
})

有人可以帮我吗?

标签: javascriptmysqlnode.jsexpress

解决方案


这是使用 mysql 和 async/await 进行查询的示例。这应该做你想做的事:

查询文件

const db = require('./db/connect');

module.exports = {
    getID(name) {
        return new Promise((resolve, reject) => {
            db.query(`SELECT CWID FROM user WHERE surname = '${name}'`, function(error, result, fields) {
                if (error) {
                    reject(error);
                } else {
                    resolve(result);
                }
            });
        });
    }
}

主文件

router.post('/test', async function(req, res){
    const data = await queries.getID(req.body.name); 
    console.log("Query result: ", data);
    res.render('new test', {title: "test"}); 
});

初始示例中未定义结果的原因是您使用的是异步 i/o(在 Node.js 中正常)。通过从 getID 返回一个 Promise,我们可以实现异步。调用很容易并且有一些很好的代码语法。


推荐阅读