Я использую NodeJS и Express для создания REST API. Давайте получим пользователя по его идентификатору. У меня есть маршрутизатор, модели и контроллеры.
Сначала я монтирую свои маршруты в routes/index.js
const user_routes = require('./userRoutes')
module.exports = app => {
app.use('/user', user_routes)
}
Затем я определяю маршрут в /routes/userRoutes.js
, который используется для получения пользователя по его идентификатору. , Далее я включаю контроллер для моего пользователя.
const Router = require('express-promise-router')
const user_controller = require('../controllers/userController');
const router = new Router()
module.exports = router
// Get user by ID
router.get('/:id', user_controller.getById)
Контроллер определен в /controllers/userController.js
и включает модель пользователя.
const user_model = require('../models/userModel')
const getById = async (req, res) => {
user_data = req.params
try {
user = await user_model.getById(user_data.id)
// User not found
if (user === null) {
res.status(404)
res.send("User not found.")
} else {
res.send(user)
}
} catch (err) {
res.status(500)
res.send("Something went wrong on the server")
}
}
module.exports = {
getById,
}
И в /models/userModel.js
мы имеем модель
const db = require('../db')
const bcrypt= require('bcrypt');
// Get user by ID
//
// 200: User found
// 404: User not found
// 500: Server-side error
const getById = async (id) => {
// Set up query object
const query = {
text: 'SELECT * FROM users where id=$1',
values: [id]
}
try {
// Get user by id
const { rows } = await db.query(query)
// Reutrn user
if ( rows.length == 1) {
return rows[0]
}
// Return null if no user with this id was found
else {
return null
}
} catch (err) {
throw (err)
}
}
Как видите, проверка реальных данных не проводилась. Если идентификатор не число, мы просто получаем ошибку 500. Так что этот код не заботится обо всех крайних случаях. Моя текущая проблема состоит в том, чтобы знать, как правильно позволить моей модели общаться с моим контроллером. В настоящее время у меня есть только 3 случая в этом примере, в то время как один из них является ошибкой сервера - которую я просто позволил «всплыть», иначе перебросить, пока я где-то правильно его не поймал. Тогда у меня либо есть пользователь, либо нет (ноль).
Есть ли какой-то большой недостаток в таком виде связи между моделью и контроллером?