Es klingt wie Sie eine highly coupled Anwendung haben; Es ist schwierig für Sie, Ihren Code in Module zu zerlegen, weil Teile der Anwendung, die nicht aufeinander angewiesen sein sollten, dies tun. Ein Blick in the principles of OO design kann hier helfen.
Zum Beispiel, wenn Sie Ihre Dataabse Logik aus der Hauptanwendung aufteilen sollten, sollten Sie in der Lage sein, dies zu tun, da die Datenbanklogik nicht von app
oder io
abhängen sollte - es sollte in der Lage sein, daran zu arbeiten eigene und Sie require
es in andere Teile Ihrer Anwendung, um es zu verwenden.
Hier ist ein ziemlich einfaches Beispiel - es ist mehr Pseudocode als der tatsächliche Code, da der Punkt ist, Modularität durch Beispiel zu demonstrieren, nicht eine funktionierende Anwendung zu schreiben. Es ist auch nur eine von vielen, vielen Möglichkeiten, wie Sie Ihre Anwendung strukturieren können.
// =============================
// 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);
Das war alles von der Oberseite meines Kopfes mit minimaler Kontrolle der Dokumentation für verschiedene APIs abgeschrieben, aber ich hoffe, dass es Pflanzen, die Samen, wie Sie über das Extrahieren Module aus der Anwendung gehen könnten.
Dies ist wirklich hilfreich für Leute, die neu in der Knoten- und Modulstrukturierung sind. Das funktioniert wie ein Zauber und wie du gesagt hast, kann ich sehen, wie es viele Möglichkeiten gibt, dies zu tun. – Deminetix
vielen Dank, es hat funktioniert –