我試圖將我的簡單 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);
});
database.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};
uj5u.com熱心網友回復:
了解使 JavaScript 與其他語言不同的主要因素之一是它是異步的,簡單來說,這意味著代碼在完成執行之前不會“等待”代碼。因此,當您嘗試查詢資料庫時,這需要一些時間,之后的代碼會變得不耐煩并執行,而不管查詢如何進行。為了解決這個問題,該mysql包使用了回呼,它允許您在查詢完成后向其傳遞一個函式以執行查詢結果。
因為該庫對回呼進行操作,所以它不回傳任何內容;在其他地方使用它似乎很成問題,不是嗎?
為了解決這個問題,我們可以自己做回呼。或者更好的是,使用稱為 promises 的較新的 JavaScript 功能,您基本上可以從函式中“回傳”任何內容,即使您在回呼中也是如此。
讓我們用查詢來實作它:
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函式。為了拋出錯誤,我們reject以錯誤為引數呼叫函式。
我們的新功能相當容易使用。
select("abcd").then(result => {
console.log("Result received:", result);
}).catch(err => {
console.error("Oops...", err);
});
你可能會看到這段代碼然后說,“等一下,我們仍在使用回呼。這并不能解決我的問題!”
介紹async/ await,一個讓您可以使用它的功能。我們可以像這樣呼叫該函式:
// 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 {...}塊中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/434663.html
標籤:javascript mysql 节点.js 表示
