首页 > 解决方案 > 您如何正确导出/导入 NodeJs 类及其各自的功能

问题描述

背景:我正在使用带有nodejs的mysql。我希望经常使用嵌套查询,因此为了避免“回调地狱”,我制作了一个简单的类,其中包含由 Promises 支持的函数。

问题:将我的类导入所需的文件后,我尝试在路由query(sql, params){...}内的 POST 请求中调用我的函数/login,但是我收到以下错误:TypeError: Database.query is not a function 注意:我的所有代码都已编译,因此我的文件位置没有问题进口。当我运行程序时会出现问题。

代码:

Database.js: 这就是我要导出到我的api.js文件中的内容。

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:这是我的应用程序后端逻辑的位置。

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

标签: javascriptmysqlnode.js

解决方案


query是一种可以在实际对象上调用的方法。你称之为()的方式,它必须是类的静态方法DatabaseDatabaseDatabase.queryDatabase

要使用query,您必须在Database某处进行初始化,例如使用const database = new Database(config);. 然后您可以访问该对象并调用query: database.query(...)


推荐阅读