Преамбула: я новичок в веб-разработке, так что, возможно, это может быть очень простой вопрос для вас.
Я использую шаблон архитектуры MVC для этого базового приложения.У меня есть модели (MongoDB), представления (Express Handlebars) и контроллеры (функции, которые принимают req, res, next и возвращают обещания (возвращается .then> JSON, возвращается ошибка .catch>). Я буду маршрутизироватьпути требуют соответствующих конечных точек API в контроллерах.
Это имеет смысл (верно?), когда я просто работаю над вызовами API, где JSON является рез. Однако я также хочу вызывать эти конечные точки API> получить их res.json> и использовать его для рендеринга моего HTML-кода с помощью Handlebars. Каков наилучший способ сделать это? Я могу создать такие же контроллеры и вместо того, чтобы быть JSON, я могу сделать render ("html view", res.json). Но кажется, что я повторяю тот же код снова, чтобы изменить то, что делать с ответом (вернуть JSON или Render the JSON).
Надеюсь, что если я не имею смысла, то давайтея знаю. Пожалуйста, сообщите.
ps попробуйте ELI5 вещи для меня. (:
Редактировать:
//Model Example
const Schema = require('mongoose').Schema;
const testSchema = new Schema({
testText: { type: String, required: true },
});
const Test = mongoose.model('Test', testSchema);
module.exports = Test;
//Controller Example
const model = require('../models');
module.exports = {
getAll: function(req, res, next) {
model.Test.find(req.query)
.then((testItems) => {
!testItems.length
? res.status(404).json({ message: 'No Test Item Found' })
: res.status(200).json(testItems);
})
.catch((err) => next(err));
},
};
//Route Example
const router = require('express').Router(),
controller = require('../controllers');
router.get('/', controller.getAll);
module.exports = router;
Я хочу, чтобы конечные точки возвращали JSON и каким-либо образом управлять,сделать (если рeq поступает из браузера) или остается с JSON (если вызывается, например, из Postman или веб-URL API) без повторения кода.Я пытаюсь не создавать две конечные точки с 99% кода, которые являются одинаковыми, с той лишь разницей, что .then> res.status (200) .json (testItems);vs .then> res.status (200) .render ('testPage', {testItems}).