Sembra che tu abbia un'applicazione highly coupled; è difficile per te dividere il tuo codice in moduli perché parti dell'applicazione che non dovrebbero dipendere l'una dall'altra fanno. Guardando in the principles of OO design può aiutare qui.
Ad esempio, se si dovesse dividere la logica dataabse dall'applicazione principale, si dovrebbe essere in grado di farlo, poiché la logica del database non dovrebbe dipendere da app
o io
- deve essere in grado di funzionare sulla sua proprio, e si require
in altri pezzi della vostra applicazione per usarlo.
Ecco un esempio abbastanza semplice: è più pseudocodice del codice effettivo, poiché il punto è dimostrare la modularità con l'esempio, non scrivere un'applicazione funzionante. È anche solo uno dei tanti, molti modi in cui puoi decidere di strutturare la tua applicazione.
// =============================
// db.js
var mongoose = require('mongoose');
mongoose.connect(/* ... */);
module.exports = {
User: require('./models/user');
OtherModel: require('./models/other_model');
};
// =============================
// models/user.js (similar for models/other_model.js)
var mongoose = require('mongoose');
var User = new mongoose.Schema({ /* ... */ });
module.exports = mongoose.model('User', User);
// =============================
// routes.js
var db = require('./db');
var User = db.User;
var OtherModel = db.OtherModel;
// This module exports a function, which we call call with
// our Express application and Socket.IO server as arguments
// so that we can access them if we need them.
module.exports = function(app, io) {
app.get('/', function(req, res) {
// home page logic ...
});
app.post('/users/:id', function(req, res) {
User.create(/* ... */);
});
};
// =============================
// realtime.js
var db = require('./db');
var OtherModel = db.OtherModel;
module.exports = function(io) {
io.sockets.on('connection', function(socket) {
socket.on('someEvent', function() {
OtherModel.find(/* ... */);
});
});
};
// =============================
// application.js
var express = require('express');
var sio = require('socket.io');
var routes = require('./routes');
var realtime = require('./realtime');
var app = express();
var server = http.createServer(app);
var io = sio.listen(server);
// all your app.use() and app.configure() here...
// Load in the routes by calling the function we
// exported in routes.js
routes(app, io);
// Similarly with our realtime module.
realtime(io);
server.listen(8080);
questo era tutto scritto fuori dalla parte superiore della mia testa con il minimo controllo della documentazione per varie API, ma spero che pianta il seme di come si potrebbe fare per estrarre i moduli dall'applicazione.
fonte
2012-11-11 19:13:50
Questo è veramente utile per le persone nuove al nodo e alla strutturazione dei moduli in generale. Funziona come un incantesimo e come hai detto, posso vedere come ci potrebbe essere un sacco di modi per farlo. – Deminetix
grazie mille, ha funzionato –