【问题标题】:Javascript class method returning undefined返回未定义的Javascript类方法
【发布时间】: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


【解决方案1】:

您忘记导出模块。因此database 应该在您的代码中未定义,从而导致您的问题。

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});
    }
}

module.exports = DB;

在 node.js 中导入也有点不同

var DB = require("./db.js");
var express = require("express");
var cors = require("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}`)
);

注意:您应该能够在大于 13 的 node.js 版本中使用 javascript 模块(这就是您的代码可能工作的原因)。如果您决定使用该语法,请确保您的部署服务器也支持 node.js 13。更多关于javascript modules

【讨论】:

  • 要使用import和export,文件package.json必须包含"type": "module",
猜你喜欢
  • 2020-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
  • 2017-07-06
  • 1970-01-01
相关资源
最近更新 更多