[英]Value returned from custom database connection class is 'undefined', using node.js and ES6
編輯:我可以看到另一個問題可能正在解決相同的問題,但我不明白如何將給他函數foo(){..}的解決方案應用於我的特定問題(尤其是因為他是jQuery )。 如果有人可以在這里解釋,那么我會將這個問題標記為重復。
在自定義類中,該值是可訪問的,但是在主代碼塊中,返回值是“未定義”。 這是由於數據庫連接引起的一些同步問題嗎? 我可以以某種方式在主index.js調用函數中訪問該值嗎?
index.js:
"use strict"
const PORT = 3000;
const express = require("express");
const server = express();
const http = require("http").Server(server);
const path = require("path");
const io = require("socket.io")(http);
const DB = require("./ofcModules/DB");
http.listen(PORT, function() {
console.log("server listening on port " + PORT);
});
//serve index.html (and CSS/JS) when receives a request
server.use(express.static(path.join(__dirname + "/public")));
server.use(express.static(__dirname + "/public/css"));
server.use(express.static(__dirname + "/public/js"));
//*********Connect to Database************************
var mDB = new DB();
var mTblID;
mDB.connect()
mTblID = mDB.newTable();
console.log("mTblID: " + mTblID);
自定義數據庫類:
"use strict"
const mysql = require("mysql");
class DB{
constructor() {
this.conn = mysql.createConnection({
host : 'localhost',
user : "hfghr",
password: "dhrjtyjnm",
database: "yiluilrt"
});
}
connect() {
this.conn.connect(function(err) {
if (err) {
console.error("error connecting: " + err.stack);
//throw err;
return;
}
console.log("connected to DB");
return this.conn;
});
}
newTable() {
this.conn.query("INSERT INTO tbltables (notes) VALUES ('table opened')", function(err, result){
if (err) {
console.error("error getting table ID from mysql: " + err.stack);
throw err;
return;
}
console.log("playing table created via DB. ID: " + result.insertId);
return result.insertId;
});
}
}
module.exports = DB
這是服務器控制台輸出:
mTblID: undefined
server listening on port 3000
connected to DB
playing table created via DB. ID: 18
您的newTable函數實際上沒有返回任何值。 由於mysql.query是異步的,因此您需要提供一個回調。 一種解決方案是將一個函數傳遞給newTable,該函數將在mysql.query回調中執行。 這是一個粗略的示例:
//*********Connect to Database************************
var mDB = new DB();
mDB.connect()
mDB.newTable(function (mTblID) {
console.log("mTblID: " + mTblID);
});
這是newTable的實現
newTable(callback) {
this.conn.query("INSERT INTO tbltables (notes) VALUES ('table opened')", function(err, result){
if (err) {
console.error("error getting table ID from mysql: " + err.stack);
throw err;
return;
}
console.log("playing table created via DB. ID: " + result.insertId);
callback(result.insertId);
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.