Articles of 体系结构

不确定如何在Express / MongoDB应用程序中访问数据访问对象/层

我有一个运行MongoDB的Express应用程序。 我想从服务器级别分离出我的数据库访问。 但是,要获得数据库调用的结果,我只能做两件事情之一: 通过Res作为参数 //server.js … var dbApi = require('../data/db-api.js'); … app.get('/api/user', dbApi.getUsers(function (data) { res.send(data); })); … //db-api.js … getUsers: function (callback) { MongoClient.connect(url, function (err, db) { if (err) { throw err; } db.collection(collections.Users) .find({}) .toArray(function (error, documents) { db.close(); callback(documents); }); }); } … 假设在db-api.js中使用Express req / res范例 //server.js … var dbApi […]

实施可伸缩聊天服务器的策略

我正在寻找实施某种聊天服务器。 我希望它能够扩展。 这似乎是一个很大的问题,所以我想我希望答案是方向指针,有点探索性。 最终用户客户端是networking或电话客户端。 我认为某种websocket的实现,比如Socket.IO很好。 在服务器端,我希望使用Node.js. 我希望架构能够扩展,以便用户数量不受限制(在理性的情况下,没有预料到大规模攻击的可能性,如果是这样,有更聪明,有经验的人在其上工作的机会是合理的而不是目前只是我编码)每个聊天室的用户数量有希望不受限制,或者可能是一些固定的大数目。 这意味着我需要使用几个在Node中编写的服务器水平扩展。 假设有一些负载平衡器(希望将来不是单点失败,但我不知道如何实现这一点,或者也许只是转移到AWS)将调度从最终客户端到聊天服务器的SocketIO连接。 不同的用户连接到不同的服务器可能在同一个房间,所以这些消息需要发送到其他服务器。 我将如何切实执行这样的事情? 希望不要太复杂。 问题:(1)如果所有的服务器需要处理所有的消息,因为用户可以通过任何服务器login,这是否规模? (2)我需要某种消息队列让服务器在它们之间进行交谈吗? Rabbitmq的Pub-sub是否可用? 或者,如果zeromq,我将如何扩大酒吧子? Zeromq指南解释了使用REQ / REPtypes的应用程序扩展到多个服务器的情况。 但不是Pub Sub。 (3)或者我应该从XMPP开始? 我希望能够尽可能地简化工作。

使用Node / Express构build企业应用程序

我试图了解如何使用Node / Express / Mongo构build企业应用程序(实际上使用MEAN堆栈)。 在阅读2本书和一些Googlesearch(包括类似的StackOverflow问题)之后,我找不到使用Express构build大型应用程序的好例子。 我读过的所有资源都build议通过以下实体来分割应用程序: 路线 控制器 楷模 但是我看到这个结构的主要问题是控制器就像上帝对象,他们知道req , res对象,负责validation,并且包含业务逻辑 。 另一方面,路由在我看来似乎是过度工程,因为他们所做的只是将端点(path)映射到控制器方法。 我有Scala / Java背景,所以我有习惯把3层中的所有逻辑分开 – controller / service / dao。 对我而言,下列陈述是理想的: 控制器只负责与WEB部分交互,即编组/解组,一些简单的validation(必需,最小,最大,电子邮件正则expression式等); 服务层(实际上我错过了NodeJS / Express应用程序)只负责业务逻辑,一些业务validation。 服务层不知道任何关于WEB部分的东西(也就是说,他们可以从其他应用程序中调用,而不仅仅是从web上下文中调用)。 关于DAO层对我来说都是清楚的。 mongoose模型实际上是DAO,所以这里最清楚的是我在这里。 我认为我见过的例子非常简单,只显示了Node / Express的概念,但是我想看看一个真实世界的例子,其中包含许多业务逻辑/validation。 编辑: 还有一件事是不清楚的,就是缺lessDTO对象。 考虑这个例子: const mongoose = require('mongoose'); const Article = mongoose.model('Article'); exports.create = function(req, res) { // Create a new […]