不断发展的NodeJS服务器:如何构建代码?

时间:2016-05-18 20:52:59

标签: node.js

所以我有一个NodeJS应用程序,它的规模正在增长。这里有一个应用程序的小背景:

  1. 它最初只是一个将某些东西保存到服务器的API。
  2. 服务器开始获得更多功能:更复杂的对象,对象关系,更复杂的请求。
  3. 服务器开始使用套接字编程功能。
  4. 需要一个自定义管理仪表板,所以它就是。
  5. 我开始在API之上实现Web客户端。原始客户端是一个iPhone应用程序,但我们看到需要一个额外的客户端。
  6. 截至今天,应用程序的构建和组织方式并不可怕,主要是因为所有上述添加内容都相当小。但是,如果我们不对应用进行模块化,我可以看到维护噩梦早日宣布。

    所有业务逻辑都存在于路由中:每个模型都有一个路由,所有发生的事情都在那里定义。我也有搜索路线。我有一个用于提供视图的路由,index.js,我用于管理面板和Web客户端。

    我的所有mongo模型都位于/models文件夹中。它们几乎没有任何业务逻辑。

    最后,套接字和一些路由几乎完全相同,所以现在有很多复制粘贴代码。 (或者至少它们应该是。而不是复制粘贴,我决定在我的套接字调用中调用我的路由)。将常用处理程序放在一个单独的文件中然后可以在需要的地方导入它是否是一个更明智的想法?

    我如何模块化我的服务器,使客户端与服务器分离(理想情况下甚至在不同的存储库中)?关于如何处理不断增长的服务器的一般提示?

    有关信息,我的文件夹结构如下所示:

    server
    |
    |-- bin
    |-- models
    |-- public
    |-- routes
    |-- views
    |
    |-- app.js
    

2 个答案:

答案 0 :(得分:4)

我用于带有Socket.io的NodeJS API的文件夹结构是:

server
|
|-- config
|-- controllers (Uses handler functions according to socket event)
|-- handlers (Uses mongo functions find, update etc.)
|-- models (Mongo models)
|-- public
|
|-- app.js (Uses controllers)

为了解决这个问题,客户想要获取他的用户详细信息,以便通过套接字发出用户/ get事件。服务器需要一个处理此特定事件的用户控制器。控制器函数从用户处理程序类调用get函数。控制器通过回调从处理程序函数检索响应,并将结果(或错误,如果出错)发送到客户端。模型视图控制器(MVC)与socket.io。

答案 1 :(得分:0)

使用像express engine这样的生成器,为您的客户端和服务器端提供一个结构,包括一个包含您希望使用的模板引擎的package.json文件。请在此处查看:https://www.npmjs.com/package/express-generator