Qual è lo scopo della separazione dei percorsi in singoli moduli con Node.js ed Express?

2

La mia app utilizza Node.js e Express 4 e ha il seguente codice nel file app.js che si trova nella directory root:

var express = require('express');

var index = require('./routes/index');
var users = require('./routes/users');

var app = express();

app.use('/', index);
app.use('/users', users);

La cartella routes nella directory root contiene un file index.js con il seguente codice:

var express = require('express');
var router = express.Router();

router.get('/', function (req, res, next) {
    res.render('index');
});

module.exports = router;

La cartella routes contiene anche un file users.js con il seguente codice:

var express = require('express');
var router = express.Router();

router.get('/', function (req, res, next) {
    res.render('users');
});

module.exports = router;

Sono nuovo di Express e Node.js. Mi risulta che questa struttura porti le richieste del browser a domainName.com per eseguire il file index.js , mentre le richieste a domainName.com/users eseguiranno il file users.js , con la conseguente visualizzazione di diverse visualizzazioni nel browser.

Qual è lo scopo di organizzare il codice in questo modo? (ad esempio, perché app.use() in app.js viene utilizzato per isolare ogni router.get(path, callback) nel suo rispettivo modulo?)

La pratica comunemente accettata è quella di organizzare percorsi in modo diverso per un'app singola pagina rispetto a un sito Web costituito prevalentemente da testo statico, ad esempio un blog? Se sì, come?

    
posta Jackmc1047 15.04.2015 - 19:39
fonte

1 risposta

1

Quando hai solo due percorsi, non ha senso separarli in questo modo. Tuttavia, quando consideri un'applicazione reale con molti percorsi, inizia ad avere più senso.

/routes/user.js

var express = require('express');
var router = express.Router();
var User = require('../models/user');

router.get('/', function (req, res, next) {
    res.render('users');
});

router.param('userid', function (req, res, next, userid) {
    req.user = User.findById(userid);
    req.userid = userid;
});

router.get('/:userid', function (req, res, next) {
    req.user.exec(function (err, user) {
        if (err) { return next(err); }
        res.render('user', {user: user});
    });
});

router.put('/:userid', function (req, res, next) {
    User.findByIdAndUpdate(req.userid, req.body, function (err) {
        if (err) { return next(err); }
        res.render('user-updated');
    });
});

router.delete('/:userid', function (req, res, next) {
    User.findByIdAndDelete(req.userid, function (err) {
        if (err) { return next(err); }
        res.render('user-deleted');
    });
});

module.exports = router;

Avere tutto questo in app.js ti sfuggirà di mano molto velocemente, ancora di più una volta che avrai più modelli di appena user .

Si noti inoltre che questo non è l'unico modo per organizzare percorsi / modelli / viste né è il modo "migliore" per tutti i casi. Avrai deciso tu stesso cosa funzionerà meglio in ogni applicazione.

Nota, il codice nell'esempio è ovviamente tutto il codice di esempio che probabilmente non funzionerà. I miei metodi di modello erano basati sui metodi del modello di mangusta.

    
risposta data 24.04.2015 - 17:54
fonte

Leggi altre domande sui tag