分割节点应用程序在不同的文件(Divide Node App in different files)

2019-07-03 18:09发布

我发展我第一次的Node.js应用程序与Socket.IO,一切都很好,但现在应用慢慢变大,我想划分应用程序代码放到不同的文件进行更好的维护。

比如我定义我所有的猫鼬模式,并在主文件中的路线。 下面是对socket.IO连接的所有功能。 但现在我想为这些模式一个额外的文件,用于路由和一个用于功能一个额外的文件。

当然,我知道我自己写的模块或加载使用需要文件的可能性。 这只是没有任何意义对我来说,因为我不能像应用程序,IO或DB的增值经销商没有使他们的全球合作。 如果我把它们传递给一个函数我的模块中,我不能改变它们。 我在想什么? 我希望看到一个例子这是如何在实践中不使用全局变量做..

Answer 1:

这听起来像你有一个高度耦合的应用; 这是很难为你你的代码拆分为三个模块,因为应用程序的作品,不应该依赖于对方做。 展望OO设计的原则可以帮助在这里。

例如,如果你要你的dataabse逻辑拆分出来的主应用程序,你应该能够做到这一点,因为数据库的逻辑不应依赖于appio --IT应该能够对自己的工作,你require到你的应用程序中使用它的其他部分。

这里有一个非常简单的例子 - 它比实际的代码更伪代码,因为点是通过例子来演示模块,而不是写一个工作的应用程序。 这也是唯一的,你可以决定构建应用程序很多很多的途径之一。

// =============================
// 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);

这是所有写了我的头与各种API的文档的最小检查的顶部,但我希望它的植物,你会如何从应用程序解压模块的种子。



文章来源: Divide Node App in different files