MVC Express API模型-错误“ connection.query不是函数”

时间:2019-06-28 07:49:27

标签: mysql node.js express

我正在尝试构建mvc模型API。我在查询时遇到麻烦。似乎我没有正确导出连接变量,原因是出现“ connection.query不是函数”错误。

我尝试使用exports.module导出它,但是因为我已经有要导出的路由器,所以出现了这个错误:TypeError('Router.use()需要中间件功能,但是得到了'+ gettype(fn)) TypeError:Router.use()需要一个中间件功能,但有一个对象

我也尝试使用以下语法导出:exports.connection = mysql.createConnection({...}),但是问题是connection.connect()  紧随其后的是,不再被识别,所以我不知道我是否连接良好

这是index.js:

var express = require('express');
var router = express.Router();
var mysql = require('mysql');
var indexController =  require('../controllers/IndexController');
var booksController = require('../controllers/BooksController');


connection = mysql.createConnection({  
    debug:true, 
    host:'localhost',
    user:'user',
    password:'password',
    database:'database'
});


  connection.connect(function(error){
    if(!!error){
      console.log(error);
    }else{
      console.log('Connected!:)');
    }
 });


router.get('/', indexController.index);
router.get('/books', booksController.books);

module.exports = router;

这是booksController.js:

var BooksModel = require('../models/BooksModel');

exports.books = async function(req, res, next){
    res.send(await BooksModel.getAllBooks(req, res))
}

这是booksModel.js:

var connection = require('../routes/index');

async function getAllBooks(req, res){
    return await 
    connection.query("SELECT * FROM books", function (error,results, fields) {
        if (error) throw error;
        res.json(results);
        });
    });
}

module.exports={
    getAllBooks
}

根据查询请求,我希望从数据库中获取数据。任何帮助将非常感激。谢谢!

2 个答案:

答案 0 :(得分:0)

这是因为您的连接查询不在范围内。您将在index.js文件中返回路由器。

尝试将其设置在另一个类中:(想象一个带有connection.js文件的数据库文件夹)

// database/connection.js
module.exports = () => {
connection = mysql.createConnection({  
    debug:true, 
    host:'localhost',
    user:'user',
    password:'password',
    database:'database'
});


  connection.connect(function(error){
    if(!!error){
      console.log(error);
    }else{
      console.log('Connected!:)');
    }
 });

  return connection;
}

然后在您的模型中

var getConnection = require('../database/connection');

async function getAllBooks(req, res){
    return await 
    getConnection().query("SELECT * FROM books", function (error,results, fields) {
        if (error) throw error;
        res.json(results);
        });
    });
}

module.exports={
    getAllBooks
}

答案 1 :(得分:0)

代替从index.js文件导出模块导出默认路由器 这是index.js

在最后一行替换代码

module.exports = {
    router,
    connection 
};

现在在booksModel.js中,您可以使用它们

var { connection } = require('../routes/index');

在app.js / server.js / start.js中

var { router } = require('../routes/index');