![](/img/trans.png)
[英]How to pass query result data to the view in Express.js and Mysql
[英]How to return the results of mySql query using express.js?
我正在尝试将简单的 SELECT 命令的结果获取到 index.js 文件,我希望在该文件中将所有记录分隔在一个数组中。 如果我在 database.js 中打印结果,JSON.parse 就可以正常工作。 但是如果我想返回它们并将它们放入我需要它们的 index.js 中,我在打印它时总是得到 undefined 。
index.js代码
const express = require('express');
const app = express();
const database = require('./database');
app.use(express.json());
app.use(express.urlencoded());
app.use(express.static('public'));
app.get('/form', (req,res) =>{
res.sendFile(__dirname + '/public/index.html' );
console.log(req.url);
console.log(req.path);
})
app.listen(4000, () =>{
console.log("Server listening on port 4000");
database.connection;
database.connected();
//console.log(database.select());
let results = [];
//results.push(database.select('username, password'));
let allPlayer = database.select('username');
console.log(allPlayer);
});
数据库.js代码
let mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost',
database: 'minigames',
user: 'root',
password: 'root'
});
function connected(){
connection.connect((err) => {
if(err) throw err;
console.log("Connected...");
})
}
function select(attribute){
let allPlayer = [];
let sql = `SELECT ${attribute} FROM player`;
let query = connection.query(sql, (err, result, field) => {
if(err) throw err;
return Object.values(JSON.parse(JSON.stringify(result)));
})
}
module.exports = {connection, connected, select};
理解使 JavaScript 与其他语言不同的主要因素之一是它是异步的,简单来说意味着代码在完成执行之前不会“等待”代码。 因此,当您尝试查询数据库时,这需要一些时间,无论查询如何进行,它之后的代码都会变得不耐烦并执行。 为了解决这个问题, mysql
package 使用回调,它允许您将 function 传递给它,以便在查询完成并获得查询结果后执行。
因为库在回调上运行,所以它不返回任何东西; 在其他地方使用它似乎很有问题,不是吗?
为了解决这个问题,我们可以自己做回调。 或者更好的是,使用称为 promises 的更新的 JavaScript 功能,您基本上可以从 function 中“返回”任何内容,即使在回调中也是如此。
让我们用查询来实现它:
function select(attribute) {
return new Promise((resolve, reject) => {
let sql = `SELECT ${attribute} FROM player`;
let query = connection.query(sql, (err, result, field) => {
if(err) return reject(err);
resolve(Object.values(JSON.parse(JSON.stringify(result))));
});
});
}
要从 promise“返回”,我们将一个值传递给resolve
function。要抛出错误,我们调用reject
function 并将错误作为参数。
我们的新 function 相当易于使用。
select("abcd").then(result => {
console.log("Result received:", result);
}).catch(err => {
console.error("Oops...", err);
});
你可能会看看这段代码和 go,“等一下,我们仍在使用回调。这不能解决我的问题!”
引入async
/ await
,这是一项让您可以使用它的功能。 我们可以这样调用 function:
// all 'await's must be wrapped in an 'async' function
async function query() {
const result = await select("abcd"); // woah, this new await keyword makes life so much easier!
console.log("Result received:", result);
}
query(); // yay!!
要实现错误捕获,您可以将内容包装在try {...} catch {...}
块中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.