Вы добавляете промежуточное ПО следующим образом:
router.post('/register', upload, handle.register);
Как в примерах, которые вы видите.
В моем не очень скромном мнении
Вы упоминаете, что отделили ваши маршруты от обработчика маршрутов. На мой взгляд, это не только неверно, но и совершенно неверно.
В обычной архитектуре MVC, которую вы видите на других языках, маршрут и обработчик маршрута вместе составляют контроллер . В своем дизайне вы разделили контроллер на две отдельные структуры. В первую очередь, это заставляет ваш лог c обработки маршрута и информацию о том, для какого маршрута он используется, существовать в двух отдельных файлах, когда они должны быть расположены очень близко друг к другу.
Теперь, когда вы добавляете промежуточное ПО, вы обнаруживают, что промежуточное ПО установлено в маршрутах, и с вашим дизайном трудно понять, какое промежуточное ПО установлено для вашего обработчика маршрутов.
следуйте шаблону проектирования MVC - отделите свою модель от вашего контроллера (представление бесплатно, потому что оно в основном res.json()
).
По моему не очень скромному мнению, вы должны создать модель для своего user вместо разделения контроллеров на две части. Вашему пользователю, очевидно, нужна функция регистрации, и функция регистрации должна быть успешной или неудачной, но не должна беспокоиться о какой-либо обработке ошибок HTTP, потому что это работа контроллера:
exports.user = {
// .. other methods
register: async function (username, password) {
try {
const user = await db.User.create({username, password});
return user;
} catch (err) {
if(err.code === 11000){
err.message ='Sorry, details already taken';
}
throw err;
}
}
}
Затем в вашем контроллере (большинство Express пример вызова "route") вы делаете:
const user = require('./user');
router.post('/register', upload , async (req, res, next) => {
try {
const user = user.register(req.body.username, req.body.password);
const {id, username} = user;
res.status(201).json({id, username});
} catch (err) {
next(err);
}
})
Однако это только мое личное мнение.