Я разработал систему с использованием Laravel, теперь я хочу перенести ту же систему на NodeJS. В Laravel я использовал шаблон хранилища ( эта библиотека ), поэтому у меня была такая схема:
router => controller => service => repository => (eloquent) модель
Что ж, я видел несколько библиотек ( awilix , sequelize ), которые могли бы помочь мне выполнить задачу, но у меня есть некоторые сомнения.
Я структурировал папки следующим образом:
/server.js
/lib/config
/lib/routes
/lib/controllers
/lib/models
/lib/services
Мне бы хотелось получить представление, если я нахожусь на правильном пути для создания огромного приложения (в системе будет более 100 объектов).
Другой вопрос, я не могу использовать Dependency Injection через awilix, поэтому я пробую что-то ручное, но каждый раз, когда я использую DepartmentController как класс, я получаю эту ошибку:
Route.get() requires a callback function but got a [object Undefined]
server.js
const express = require('express');
const app = express();
app.use(express.static(path.join(__dirname, 'public')));
const routes = require('./lib/routes/index'); // Rotas
app.use('/', routes);
Библиотека / Контроллеры / index.js
const departmentController = require('./DepartmentController');
module.exports = {
departmentController
};
Библиотека / Контроллеры / DepartmentController.js
const Department = require('../models').Department;
const DepartmentService = require('../services/DepartmentService').DepartmentService;
module.exports = class DepartmentController {
list(req, res) {
return Department
.all()
.then(data => res.status(200).send(data))
.catch(error => res.status(400).send(error));
}
}
Библиотека / маршруты / index.js
const routes = require('express').Router();
const department_routes = require('./DepartmentRoute');
routes.use('/api', department_routes);
module.exports = routes;
Библиотека / маршруты / DepartmentRoute.js
const router = require('express').Router();
const departmentController = require('../controllers').departmentController;
router.route('/departments').get(departmentController.list);
module.exports = router;
Библиотека / модель / Department.js
var Sequelize = require('sequelize');
module.exports = (sequelize, DataTypes) => {
var Department = sequelize.define('Department',
{
// sequelize options and database fields, working fine
}
return Department;
};
Библиотека / услуги / DepartmentService.js
const Department = require('../models').Department;
module.exports = class DepartmentService
{
constructor({ Department }) {
this.departments = Department
}
findAll() {
return this.departments.all();
}
}