«Home» не является конструктором на Node JS

#javascript #node.js #ecmascript-6

#javascript #node.js #ecmascript-6

Вопрос:

Я использую consign для автоматической загрузки моделей моих приложений, маршрутов и т.д… У меня есть модель, которая моделировалась в стиле ES6, и когда я создаю ее экземпляр, она выдает мне эту ошибку TypeError: app.src.models.Home is not a constructor Я пытался использовать стиль ES5, но без разницы. Объект, который создает отправитель, находится с моделями внутри, но я не могу получить к нему доступ.

Это мой класс:

 /*function Home() {

}

Home.prototype.getHomeData = function (conexao, callback) {
    conexao.query('select * from tarefas', callback)
} //IT does not work like the item below, so I will keep using ES6
*/

class Home {
    constructor() {
        console.log('Construi')
    }

    getHomeData(conexao, callback) {
        conexao.query('select * from tarefas', callback)
    }
}
module.exports = function () {
    return Home
}
  

Посмотрите:
Server.js:

 var express = require('express'),
    bodyparser = require('body-parser'),
    app = express();
var consign = require('consign');
consign()
    .include('./src/routes')
    .then('./src/config/db.js')
    .then('./src/models')
    .into(app);
console.log("I'm on server.js: ", app.src.models)
app.use(bodyparser.urlencoded({ extended: true }));
app.listen(3000, function () {
    console.log("Servidor ON");
});
module.exports = app;
  

и консоль возвращает правильно I'm on server.js: { 'home.model': [Function: Home] }

Когда я получаю от маршрута, он продолжает показывать мне, что у app.src.models есть данные, выводимые на консоль: I'm on the home.js and still have data { 'home.model': [Function: Home] }

Но когда я пытаюсь создать экземпляр класса, я выдаю ошибку, указанную выше…

 module.exports = function (app) {
    app.get('/', function (req, res) {

       console.log("I'm on the home.js and still have data  ", app.src.models)
        var conexao = app.src.config.db()
        var homeData = new app.src.models.Home();

        homeData.getHomeData(conexao, (err, result) => {
            if (err) {
                res.json(err)
            } else {
                res.json(result)
            }
        })
    });
} 
  

если я попробую ниже, консоль станет неопределенной:

 console.log("I'm on the home.js and still have data  ", app.src.models.Home)
  

Вот мой репозиторий, если вы хотите https://github.com/tiagosilveiraa/PM_API

Предварительный вариант 1:

Я создал класс Home module.exports = new Home() , и он выдает ту же ошибку

Комментарии:

1. в вашем Home классе экспортируйте сам класс, а не функцию module.exports = Home

2. Он выдает эту ошибку TypeError: конструктор класса Home не может быть вызван без ‘new’

3. Я попробовал module.exports = new Home() и вернулся к первоначальной ошибке :/

4. module.exports = { Home } ?

5. @TiagoSilveira Куда загружен ваш класс и как он вызывается? Где (в какой строке какого файла) вы получаете ошибку TypeError об отсутствии new ?

Ответ №1:

Экспортируйте свой домашний класс как таковой:

 module.exports = { Home };
  

И импортировать / использовать его как таковой:

 const { Home } = require('path/to/Home.js');
const home = new Home();
home.getHomeData(...)
  

Комментарии:

1. Это работает, но не передает информацию из базы данных, откуда я знаю, что он успешно подключился?

2. Это ожидаемый результат. new Home() создает новый экземпляр Home .

3. Моя ошибка, таблица, к которой я запрашивал, была пустой, ха-ха, но… А загрузчик отправки? Этот способ работает! но загрузчик consign тоже должен работать, не так ли? Я имею в виду app.src.models.Home()