NodeJS

#javascript #node.js #express #npm #node-modules

#javascript #node.js #выразить #npm #узлы-модули

Вопрос:

Я не могу получить доступ к функции, которую я экспортирую в 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 не является функцией

Ответ №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() , для использования в других модулях.

Надеюсь, это поможет!

Комментарии:

1. Но почему он возвращает строковое значение, когда я возвращаю функцию?

2. эй, ты перечитал мой ответ? Это потому, что экспортируемая вами функция на самом деле вызывала вашу функцию с именем getConnection(), и это значение является строкой подключения, заданной mysql connector. Имеет ли это смысл? По сути, вы на самом деле вызывали функцию вместо того, чтобы экспортировать ее. Таким образом, он вернул значение вашей строки подключения вместо самой функции

3. Хорошо, спасибо. На app.js это не работает, что очень странно, но в другом файле это работает

4. Вы экспортируете эту функцию внутри app.js так что не имеет смысла использовать импорт и использовать его там. Если вы хотите использовать его в app.js Я бы переместил этот код в новый модуль, возможно, назвал бы его Config.js , а затем потребовать, чтобы этот новый модуль внутри app.js