Как правильно экспортировать / импортировать класс NodeJs и его соответствующие функции? - PullRequest
0 голосов
/ 20 апреля 2020

Фон: Я использую mysql с nodejs. Я ожидаю часто использовать вложенные запросы, поэтому, чтобы избежать «ада обратного вызова», я создал простой класс с функциями, поддерживаемыми Promises.

Проблема: После импорта моего класса в мой нужный файл я пытаюсь вызвать мою функцию query(sql, params){...} внутри моего запроса POST по маршруту /login, однако я получаю следующую ошибку: TypeError: Database.query is not a function Примечание: весь мой код компилируется, поэтому нет проблема с расположением файла при импорте. Эта проблема возникает при запуске программы.

Код:

Database.js: это то, что я экспортирую в my api.js file.

var mysql = require('mysql');

const configuration = {
    host: 'localhost',
    user: 'root',
    password: '******',
    database: 'myDB'
}

class Database {
    constructor(configuration) {
        this.connection = mysql.createConnection(configuration) //
    }

    query(sql, params) {
        return new Promise(function(resolve, reject) {
            this.connection.query(sql, params, function(err, result) {
                if(err) return reject(err)
                resolve(result)
            })
        })
    }
}
module.exports = Database

api.js: Это местоположение для логинов бэкэнда c моего приложения.

.
.
.
var Database = require('../classes/Database')

//This is the route responsible for invoking my database query
router.post('/login', function(req,res,next) {
    const query1 = "SELECT * FROM users WHERE username = ? AND pass = ?"
    Database.query(query1, [req.body.username, req.body.password])
    .then((result) => {
        if (result.length) {
            if (req.session.username) {
                res.send('You are logged in')
            } else {
                req.session.username = req.body.username
                res.send('You have successfully logged in')
            }
        } else {
            res.send('Incorrect Credentials')
        }
    }).catch((err) => console.log(err))
 })

1 Ответ

1 голос
/ 20 апреля 2020

query - это метод из Database, который можно вызвать для фактического Database объекта. Как вы называете это (Database.query), это должен быть stati c метод класса Database.

Чтобы использовать query, вы ' Придется где-то инициализировать Database, например, с помощью const database = new Database(config);. Затем вы можете получить доступ к этому объекту и вызвать query: database.query(...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...