#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()