【问题标题】:NodeJS & Express: Can't get access to a function outside a folderrNode JS & Express:无法访问文件夹外的函数
【发布时间】:2019-09-11 22:10:48
【问题描述】:

我无法访问我在 app.js 中导出的函数

在 app.js 文件中:

function getConnection() {
    return mysql.createPool({
        host: 'localhost',
        user: 'root',
        password: '',
        database: 'Academind'
    })
}

module.exports = {
    getConnection: function () {
        return getConnection()
    }
}

在我的 orders.js 文件中:

const app = require('../../app')

function getConnection() {
    return app.getConnection() // doesn't work 
}

我收到此错误:

app.getConnection 不是函数

【问题讨论】:

    标签: javascript node.js express npm node-modules


    【解决方案1】:

    问题在于您如何导出 getConnection(...) 方法,您应该将其更改为以下内容以解决您的问题:

    app.js

    function getConnection() {
        return mysql.createPool({
            host: 'localhost',
            user: 'root',
            password: '',
            database: 'Academind'
        })
    }
    
    module.exports = {
        getConnection: getConnection
    }
    

    然后在需要它的模块中使用如下:

    orders.js

    const app = require('../../app')
    const getConnection = app.getConnection
    
    // get your database connection string 
    getConnection()
    

    之前您正在创建一个匿名函数,该函数调用您的 getConnection() 函数,该函数返回您的数据库连接字符串值而不是该函数。这就是您看到以下错误的原因:

    app.getConnection 不是函数

    因为它是包含数据库连接详细信息的字符串,而不是函数。

    现在,我们将您的 getConnection() 函数导出为一个函数,适当地调用 getConnection(),以便在其他模块中使用。

    希望对您有所帮助!

    【讨论】:

    • 但是为什么我返回函数的时候返回的是字符串值呢?
    • 嘿,你重读了我的回答吗?这是因为您正在导出的函数实际上是在调用您的函数 getConnection() 并且该值是 mysql 连接器给出的连接字符串。那有意义吗?基本上你实际上是在调用函数而不是导出它。所以它返回一个值,你的连接字符串,而不是函数本身
    • 好的,谢谢。在 app.js 上这不起作用,这很奇怪,但在另一个文件上它可以工作
    • 您正在 app.js 中导出此函数,因此使用 import 并在那里使用它没有意义。如果你想在 app.js 中使用它,我会将该代码移动到一个新模块中,也许将其称为 Config.js,然后在 app.js 中使用该新模块
    猜你喜欢
    • 2015-08-17
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    相关资源
    最近更新 更多