如何组织大型 Node.js 项目

2024-02-28

组织大型 Node.js 项目有哪些好方法?

例如,一个同时使用express.js 和socket.io 的应用程序?这将包括应用程序逻辑结构和文件系统。

目前,我发现自己将大量代码放入一个主 js 文件中,并将代码放入一个巨大的全局对象中,这感觉很顽皮。


初学者的例子

我喜欢最初从@david-ellis 检查的内容,你应该深入研究它以理解它,因为它是一个很好的内容。然而,对于想要看到直接示例的初学者来说,我希望它更加简化。这就是我希望有人向我展示的内容。

让我们举一个典型的场景,您正在使用 Express,并且您的 app.js 文件中列出了很多路由。它的内容看起来像这样:

app.js

// ... startup code omitted above

app.get('/', function(req, res) {
  res.render('index', { title : 'home' });
});
app.get('/contactus', function(req, res) {
  res.render('contactus', { title : 'contact us' });
});
app.get('/anotherpage', function(req, res) {
  res.render('anotherpage', { title : 'another page' });
});
// and so on...

您可以想象,如果您有 50 条路线,该文件可能会变得非常失控。如果能从 app.js 文件中删除一些混乱的内容,那就太好了。

您要做的就是在应用程序中创建一个“controllers”文件夹,这样您的结构现在看起来像这样:

app.js
/controllers

在“/controllers”中创建一个名为“index.js”的文件,然后放入以下代码。

/controllers/index.js

module.exports.set = function(app) {
   // copy your routes listed in your app.js directly into here
}

从“app.js”文件中剪切并粘贴路线列表,并将其放入“/controllers/index.js”文件中。

在您的 app.js 文件中,删除您的路由并在其位置执行以下操作。

app.js

// remove your routes and replace with this code
var controllers = require('./controllers');
controllers.set(app);

现在,如果您想将“/controllers/index.js”文件也分开,让我们再添加一个示例,以便您可以了解 Node.js 在如何组织代码方面实际上就像俄罗斯娃娃一样。

在“/controllers”中添加一个文件“accounts.js”并将以下内容放入其中。

/controllers/account.js

module.exports.set = function(app) {
    // put more app route listings here
}

现在在“/controllers/index.js”文件中,添加对“account.js”的引用

/controllers/index.js

var account = require('./account.js');

module.exports.set = function(app) {
   // your routes here

   // let "account.js" set other routes
   account.set(app);
}

正如您可以想象的那样,您可以不断地将内容分解成越来越小的部分,并将更多文件夹放入文件夹中,并根据需要使用“require”进行引用。您可以对“/lib”或库文件使用相同的概念。 “node_modules”已经在这样做了。

这只是使用 Node.js 编程非常愉快的众多原因之一。

Manageable Express 4 路由示例

这是我回复的另一篇关于与此相关的 Express 4 路线的帖子。

使用 Express.js 嵌套路由器休息 https://stackoverflow.com/questions/25260818/rest-with-express-js-nested-router/30549313#30549313

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何组织大型 Node.js 项目 的相关文章

随机推荐

  • Android 手风琴/手风琴/折叠动画

    我正在尝试创建一个交互式手风琴 手风琴 折叠动画 以便视图在交互时自行折叠 展开 以同样的方式折叠视图 但两侧都折叠 我认为我可以做到的方法是重写 onDraw 方法 以某种方式复制画布或画布上的信息 然后绘制以一种方式旋转的画布的前半部分
  • 不支持表/列名称中的方括号?

    postgresql 是否不支持表名 列名或数据类型中的方括号 在 pgadmin 中运行查询时出现以下错误 CREATE TABLE Test ERROR syntax error at or near SQL状态 42601 在 Pos
  • 模板继承的 UML 图

    在我的库的文件中 我有一个继承自模板的类 我的代码示例 class data class dataA public data class dataB public data inheritance from a template templ
  • 获取 div 中锚点的 href 并将其应用到图像?

    我有一个 div 其中有图像和链接 是否有可能在页面加载时 我可以以某种方式找到链接的 href 并应用图像的锚标记 我知道这似乎是一个奇怪的请求 我只是问是否可以做到 如果可以 怎么做 http jsfiddle net fFgwb ht
  • R 中 beanplot 上的多种颜色

    我使用以下命令在 R 中创建了豆图 beanplot windA side both border NA col list gray c red white ylab Wind Speed m s what c 1 1 1 0 xaxt n
  • 无法在 Nginx 服务器中使用 LetsEncrypt 设置 HTTPS

    我按照以下教程在 DigitalOcean 上为我的网站设置 https https www digitalocean com community tutorials how to deploy a laravel application
  • QuickSort对递归深度的估计

    递归深度是 QuickSort 达到其基本情况之前连续递归调用的最大数量 并注意它 递归深度 是一个随机变量 因为它取决于所选的主元 我想要的是估计快速排序的最小可能和最大可能递归深度 以下过程描述了 QuickSort 通常实现的方式 Q
  • 我如何从文件中反序列化记录结构,已经使用 print-dup 保存到文件中?

    我有以下代码 use clojure java io defrecord Member id name salary role defrecord Role id name def member records ref defn add m
  • Google Drive Android Intent 中的文件视图

    如果有人能提供帮助 我会非常棒 我正在构建一个应用程序 我试图访问我的文件并将它们显示在图像视图中 我有一个按钮 并附加了一个 onClickListener iButton setOnClickListener new View OnCl
  • PostgreSQL中如何限制列的最大显示长度

    我正在使用 PostgreSQL 表中有一列包含很长的文本 我想在查询中选择此列 但限制其显示长度 就像是 select longcolumn only 10 chars from mytable 我该怎么做 你能做的就是使用 Postgr
  • 尝试使用 AD 令牌/承载令牌 [Azure-Blob][承载令牌] 将文件放入 Azure Blob 中时授权权限不匹配

    我能够创建容器 列表容器 列表Blob但当我试图做一个PUT DELETE请求upload or deleteAzure 存储 blob 中的文件 但发出请求后显示以下错误 403 This request is not authorize
  • 从配置文件读取布尔条件?

    使用Python从配置文件中读取条件的最佳方法是什么ConfigParser and json 我想读一些类似的内容 mysettings x gt 10 y lt 5 然后将其应用到代码中x and y是已定义的变量 并且条件将应用于x
  • Rest 服务的 Application 类生命周期是什么?

    每个休息服务都是从扩展应用程序类并定义应用程序路径开始的吗 该应用程序类本身的生命周期是什么 这是一个例子 import javax ws rs core Application javax ws rs ApplicationPath re
  • 在if语句中创建对象并稍后使用它

    我正在为中缀表示法编写一个解析器 在 if 语句中我声明了变量 newchild 否则我希望它抛出异常 但是当我超出范围时 编译器不再知道该变量 我不能在 if 语句之前声明它 因为根据我们所处的情况 该变量被分配了不同的数据类型 我可以做
  • 滚动经过一定数量的像素时位置固定

    我正在寻找一种方法 仅在向下滚动大约 170 像素后将页面的 header 元素定位为 固定 标题上方是一个横幅 因此当人们向下滚动时 我希望横幅滚动走 标题在到达窗口顶部时保持固定 页面内容在标题下方滚动 http jsfiddle ne
  • 节点 8.6 javascript 承诺:UnhandledPromiseRejectionWarning

    我有一个错误 节点 6186 UnhandledPromiseRejectionWarning 未处理的承诺拒绝 拒绝 ID 1 三p 节点 6186 DEP0018 DeprecationWarning 未处理的承诺拒绝已被弃用 将来 未
  • 当某些内容存储为数组时,Rails where 子句

    我正在运行 Rails 4 2 带有 PG 数据库 我有一个项目存储在数据库中 例如 模型Item something gt 1 2 3 我想得到Item where something include gt 3 显然这是行不通的 但是你打
  • 创建表语法在 hsql 中不起作用

    我是 hsqldb 新手 我正在开发简单的应用程序来获取用户的一些输入 因此搜索嵌入式数据库并发现 hsqldb 是满足我的要求的解决方案 我有一些创建表语法 但它抛出异常 此查询使用 Netbeans 数据库服务执行 Query CREA
  • iOS - Facebook 登录错误 - 构建 URL 时出现未知错误(com.facebook.sdk.core 错误 3)

    我正在使用 Facebook 登录我的 iOS 应用程序 该应用程序是为 iOS 8 及更高版本开发的 正在使用最新的Facebook SDK 我已遵循 Facebook 官方指南中描述的所有基本步骤 但是 当我单击登录按钮时 出现以下错误
  • 如何组织大型 Node.js 项目

    组织大型 Node js 项目有哪些好方法 例如 一个同时使用express js 和socket io 的应用程序 这将包括应用程序逻辑结构和文件系统 目前 我发现自己将大量代码放入一个主 js 文件中 并将代码放入一个巨大的全局对象中