Я младший разработчик NodeJS, в настоящее время работаю над платформой обмена криптовалютой.Вот структура папок проекта.
/app
/controllers
/user
/order
/settings
...
index.js
/middlewares
/models
/routes
user.js
order.js
/services
user.js
order.js
...
/views
index.js
/config
/migrations
/public
/utils
server.js
.env
...
Поначалу это было немного ошеломляюще, но позже мне стало удобно перемещаться по приложению.
за исключением одного конкретного файла!index.js в каталоге контроллеров, вот как он настроен.
const { readdirSync, lstatSync } = require('fs');
const { validationSchema } = require('../../utils/validator');
module.exports = readdirSync('app/controllers')
.filter(name => lstatSync(`app/controllers/${name}`).isDirectory())
.reduce((controllersAccumulator, dir) => Object.assign(
controllersAccumulator,
{
[`${dir}Controller`]: readdirSync(`app/controllers/${dir}`)
.map(fileName => require(`./${dir}/${fileName}`))
.reduce((accum, controllerFile) => Object.assign(
accum,
Object.keys(controllerFile).reduce(validationSchema.bind(null, dir, controllerFile), {}),
), {}),
},
), {});
Должен признать, мне всегда было страшно, просто посмотреть на это!так, что он делает простыми словами, он сопоставляет запросы маршрутов с обработчиками в каталоге контроллеров.
например, если пользователь хочет сделать запрос на публикацию для регистрации новой учетной записи: путь маршрутабудет так:
// in the routes dir, user.js
const { userCOntroller } = require('../controllers/');
router.post('/registration', userController.registration);
// in the /controllers, then /user, there will be a registration.js that includes:
const UserService = require('../../services/user');
exports.registration = async (req, res) => await UserService.create(req.body);
//then in the /services directory, user.js
...
class UserService {
static create(body) { ... }
...
}
module.exports = UserService
так что я до сих пор не могу понять, как мы получили userController
, который импортируется в пользовательские маршруты в последнем фрагменте?так вот что создал файл index.js в /controllers
!
когда я спросил старших ребят в команде, они сказали: да, это трудно читать, но его кода меньше.хорошо, хорошо: \
Итак, что можно было сделать по-другому, чтобы сделать этот файл более читабельным, другими словами, есть ли способ его реорганизовать?заранее спасибо!