【发布时间】:2020-07-18 03:53:16
【问题描述】:
我正在尝试从一个类中返回一个值,但它的出现是未定义的。
index.js
import DB from "./db.js"
import express from "express";
import cors from "cors";
const database = new DB();
app.get("/", (req, res) => {
const data = database.selectAllFromProducts();
console.log(data); // Returns undefined
});
app.listen(process.env.PORT, () =>
console.log(`Listening on Port ${process.env.PORT}`)
);
db.js
class DB {
constructor() {
this.connection = this.initialize();
}
initialize() {
return mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
});
selectAllFromProducts() {
this.initialize();
this.connection.query(`select * from ${process.env.DB_PRODUCTS_TABLE};`,
(err, results, fields) => {return results});
}
}
我有一个发送 GET 请求的前端,并且发送成功,所以这不是路由问题。 Console.logging 结果来自 db.js,所以我知道这不是 MYSQL 问题,但无论出于何种原因,它在 index.js 中都是空白的。提前感谢您的帮助!
EDIT - 我有 module.exports = DB 我只是忘了包含它,因为我只包含了文件的部分位。导入对我来说很好,因为我在 package.json 中使用 babel 和 type: module。我无法标记节点,因为它需要 1500 个代表。
【问题讨论】:
-
这是 node.js 代码,您可能希望将其反映在您的标签中。
-
这和许多其他问题一样。您的
return results在.query()回调中。这不是您的功能的回报。你的函数selectAllFromProducts()实际上并没有返回任何东西。这就是返回值为undefined的原因。而且,事实上,你不能直接从你的函数中返回results,因为你的函数在它可用之前就返回了。见How do I return the response from an asynchronous call
标签: javascript mysql express class