当前位置: 首页 > 面试题库 >

将Node App划分为不同的文件

屠晟睿
2023-03-14
问题内容

我正在用Socket.IO开发我的第一个Node.js应用程序,一切都很好,但是现在该应用程序正在逐渐变大,我想将应用程序代码分成不同的文件,以进行更好的维护。

例如,我在主文件中定义了所有的猫鼬模式和路由。下面是用于socket.IO连接的所有功能。但是现在我想要为架构添加一个额外的文件,为路由添加一个额外的文件,为功能添加一个额外的文件。

当然,我知道可以编写自己的模块或使用require加载文件的可能性。这对我来说毫无意义,因为如果不将它们设置为全局,就无法使用app,io或db等var。如果将它们传递给模块中的函数,则无法更改它们。我想念什么?我想看一个示例,如何在不使用全局变量的情况下实际完成此操作。


问题答案:

听起来您的应用程序耦合度很高;您很难将代码拆分成模块,因为应用程序之间不应该相互依赖。展望OO设计的原则可以帮助在这里。

例如,如果您要将数据删除逻辑从主应用程序中分离出来,则应该能够这样做,因为数据库逻辑不应依赖于appio-它应该能够独立工作,然后将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的文档的检查却很少,但是我希望它能为您从应用程序中提取模块的方法打下基础。



 类似资料:
  • 问题内容: 我的flask应用程序当前包含一个具有多个路由和已定义路由的文件。有什么办法可以创建一个文件,其中包含未处理的路由? 我担心其中包含太多路由,并且希望使其运行,这样我也可以test.py像使用同一文件一样提取这些路由。为了使此功能正常运行,我必须进行哪些更改和/或进行哪些更改? 问题答案: 你可以使用常规的Python包结构将你的应用分为多个模块,请参见Flask文档。 然而, Fla

  • 我有这样一份清单: 如何将此列表拆分为三个变量,每个变量分别保持不变

  • 问题内容: 我对Apache Spark和Python比较陌生,想知道像我将要描述的东西是否可行? 我有一个格式为[m 1,m 2,m 3,m 4,m 5,m 6, … m n ]的RDD(运行rdd.collect()时会得到这个)。我想知道是否有可能将此RDD转换为[[m 1,m 2,m 3),(m 4,m 5,m 6).....(m n-2, m n-1,m n)]。内部元组的大小应为k。如

  • 问题内容: 我有以下SQL问题: 如何使用SELECT命令将一列(内部文本)划分为两个单独的带有拆分文本的列? 我需要使用空格字符分隔文本数据。我知道最好举一个例子来简化它。所以: 输出: 所需的输出: 谢谢大家的帮助。 问题答案: 取决于数据的一致性-假设要在第一列与第二列中显示的内容之间用一个空格隔开: 您还可以在REGEX中使用以下查询: Oracle 10g +具有正则表达式支持,根据您需

  • 我是詹金斯的新手。我有一个作业,当我进入配置时,我看到它计划在美国东部夏令时12:25:03运行 建造时间表:H(0-3)*** 我想把它改为在美国东部夏令时上午8:15运行,我该怎么做? 如果我想运行不止一次,例如美国东部时间上午8:15和下午2:15,我怎么能做到这一点? 那个H H(0-3) * * * 代表什么?

  • 我有一个,其类型为和 值实际上以格式保存数据,而分组键的格式为 示例:如果我的分组rdd中有以下键 那么在我的HDFS中我应该有三个文件 为此,我尝试了以下方法: