To brzmi jak masz aplikację highly coupled; trudno jest podzielić kod na moduły, ponieważ elementy aplikacji, które nie powinny od siebie zależeć. Patrząc na the principles of OO design może pomóc tutaj.
Na przykład, jeśli chcesz podzielić logikę dataabse z głównej aplikacji, powinieneś być w stanie to zrobić, ponieważ logika bazy danych nie powinna zależeć od app
lub io
- powinna być w stanie pracować nad jej właścicielem i ty require
go do innych części aplikacji, aby go użyć.
Oto dość prosty przykład - jest on bardziej pseudokodowy niż rzeczywisty kod, ponieważ chodzi o pokazanie modułowości poprzez przykład, a nie pisanie działającej aplikacji. To także tylko jeden z wielu sposobów, na jakie możesz zdecydować się na strukturę swojej aplikacji.
// =============================
// 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);
To wszystko było odpisane czubek mojej głowy przy minimalnej kontroli dokumentacji dla różnych API, ale mam nadzieję, że rośliny nasiona, jak można iść o wydobywaniu z modułów aplikacji.
Jest to bardzo pomocne dla osób, które dopiero zaczynają budować węzły i moduły. Działa to jak czar i jak już powiedziałeś, widzę, jak może być wiele sposobów na zrobienie tego. – Deminetix
wielkie dzięki, zadziałało –