I modelli dovrebbero restituire i dati direttamente al client o al controller?

0

Dichiarazione di non responsabilità: Questa è la mia prima volta: utilizzo del nodo, creazione di un'API REST e prova lato server MVC. (quindi, statisticamente parlando, probabilmente sto facendo qualcosa di sbagliato ¯ \ _ (ツ) _ / ¯)

Sto lavorando alla creazione di una piattaforma di condivisione video da utilizzare nella mia università.

Sarà un'applicazione a singola pagina con instradamento lato client. Pianifico di effettuare richieste ajax a un'API REST per la funzionalità CRUD.

La struttura di base che ho raggiunto finora è che i miei "controller" ricevono le richieste di routing e chiamano le funzioni del modello per interagire con il DB. Ad esempio:

controllers/courses.js :

var express = require('express');
var router = express.Router();
var models = {};
models.courses = require('../models/courses.js');

router.get('/api/courses', models.courses.get_all);
router.get('/api/courses/:id', models.courses.get);
router.post('/api/courses', models.courses.create);
router.put('/api/courses/:id', models.courses.update);
router.delete('/api/courses/:id', models.courses.delete);

models/courses.js :

var db = require('../config/db_config.js');

exports.get_all = function (req, res, next) {
    db.any('select * from course')
    .then(function (data) {
        res.status(200).json({
            status: 'success',
            data: data,
            message: 'Retrieved all courses'
        });
    })
    .catch(function (err) {
        return next(err);
    });
};

exports.get = function (req, res, next) {
    db.one('select * from course where id = $1', req.params.id)
    .then(function (data) {
        res.status(200).json({
            status: 'success',
            data: data,
            message: 'Retrieved a course'
        });
    })
    .catch(function (err) {
        console.log(err);
        return next(err);
    });
};

Questo è più o meno il modo giusto per farlo? Mi prevedi di imbattermi in problemi lungo la strada?

Il mio intestino dice che il codice del modello dovrebbe passare i risultati della query al controller, anziché tornare direttamente al client. È corretto? Se è così, come potrei fare a riguardo?

Dimmi cosa faresti diversamente.

    
posta Luke 02.04.2016 - 03:36
fonte

1 risposta

1

Ecco come deve funzionare MVC ...

Il controller riceve la richiesta dal client, esegue qualsiasi logica delle regole di business per determinare e implementare le modifiche al modello richieste. La parte finale è che seleziona il modello appropriato e visualizza per tornare al client. La vista definisce la presentazione del modello al client.

Ho una seconda osservazione da fare. Se si implementa una API REST per fornire un servizio CRUD, è necessario avere il controllo completo di tutti i client che possono connettersi all'API REST. Se, come sembra dalla tua domanda, che i client sono codice javascript in esecuzione nel browser web, allora non puoi avere il controllo di tutti i client, dato che qualcuno potrebbe scrivere il proprio client per accedere all'API CRUD e manipolare gli oggetti back-end come meglio credono.

Si spera che si intenda implementare un'API REST che includa le regole aziendali che autenticano e convalidano le richieste e che eseguono gli aggiornamenti degli oggetti.

    
risposta data 02.04.2016 - 13:05
fonte

Leggi altre domande sui tag