javascript - 在另一个文件中访问 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"});
})
有人可以帮我吗?
解决方案
这是使用 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,我们可以实现异步。调用很容易并且有一些很好的代码语法。
推荐阅读
- r - 匹配字符范围内的元素 n 次
- tfs - VSTS - 如果已删除,则恢复团队项目
- git - 如何使用命令行在 Gitlab 中创建本地存储库和远程存储库?
- ruby - 来自孩子的标准输出的 Ruby 管道未关闭/如何检测空管道
- c# - 如何存储来自通用对象的验证器列表。C#
- angular - 将来自 API 的数据存储在变量 [Angular] 中
- ios - 如何通过单击 UITableView 的上一个单元格来解锁下一个单元格?
- javascript - TS2339:“字符串”类型上不存在属性“包含”
- latex - 使用 MikTex 编译时出现乳胶模棱两可的警告
- docker - Vagrant 用户即使使用 sudo 也没有 root 权限?