Фон: Я использую 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))
})