Модель MVC Express API - Ошибка «connection.query не является функцией» - PullRequest
0 голосов
/ 28 июня 2019

Я пытаюсь создать API модели MVC. У меня проблемы с выполнением запросов. Кажется, я неправильно экспортирую переменную подключения, потому что у меня ошибка «connection.query is not function».

Я пытался экспортировать его с помощью export.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 голосов
/ 28 июня 2019

Вместо экспорта маршрутизатора по умолчанию из модуля экспорта файла 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');
0 голосов
/ 28 июня 2019

Это потому, что ваш запрос на подключение выходит за рамки.Вы возвращаете маршрутизатор в файле 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...