如何构建 Node/Angular/Socket.io 项目?

Posted

技术标签:

【中文标题】如何构建 Node/Angular/Socket.io 项目?【英文标题】:How to structure Node/Angular/Socket.io project? 【发布时间】:2013-07-03 17:26:14 【问题描述】:

我正在开发一个使用 AngularJS 和 Socket.io 的项目。我发现 this 非常好的集成示例。

这是项目结构:

app.js                  --> app config
bower.json              --> for bower
package.json            --> for npm
public/                 --> all of the files to be used in on the client side
  css/                  --> css files
    app.css             --> default stylesheet
  img/                  --> image files
  js/                   --> javascript files
    app.js              --> declare top-level app module
    controllers.js      --> application controllers
    directives.js       --> custom angular directives
    filters.js          --> custom angular filters
    services.js         --> custom angular services
  bower_components/
    angular/            --> angular.js
    angular-socket-io/  --> socket.io adapter for angular
routes/
  index.js              --> route for serving html pages and partials
  socket.js             --> serve content over a socket
  api.js                --> serve JSON to our AngularJS client
views/
  index.jade            --> main page for app
  layout.jade           --> doctype, title, head boilerplate
  partials/             --> angular view partials (partial jade templates)
    partial1.jade
    partial2.jade

在 app.js 中:

var express = require('express'),
    routes = require('./routes'),
    api = require('./routes/api'),
    socket = require('./routes/socket');

...

// serve index and view partials
app.get('/', routes.index);
app.get('/partials/:name', routes.partials);

// JSON API
app.get('/api/name', api.name);

// redirect all others to the index (HTML5 history)
app.get('*', routes.index);

// Socket.io Communication
io.sockets.on('connection', require('./routes/socket'));

现在,虽然通常我只会将服务器逻辑放在app.js 中,但这里的逻辑似乎在api.jssocket.jsindex.js 之间进行划分——我很喜欢这样。

但是,假设在socket.js 中我需要使用在api.js 中定义的内容。我应该在socket.js 中添加var api = require('./api'); 吗?

【问题讨论】:

你看过 Yeoman 的生成器角度吗?这将帮助您构建应用程序。 可以,客户端没问题。角度很酷:) 问题是服务器端.. 我最终创建了模块/对象,将所有内容导入app.js 并通过相互引用传递它们(在需要时).. :) 【参考方案1】:

我最终创建了模块/对象,将所有内容导入 app.js 并通过相互引用传递它们(在需要时)..

  var mashup = require('./routes/mashupModule'),
  socket = require('./routes/socketModule'),
  browser = require('./routes/browserModule');

  socket.init(server, browser, mashup);
  browser.init(socket, mashup);

不确定这是否是在代码中进行某种分离的最佳方式。我习惯了 Java,但在 JS 中它通常是一个大源文件,这很糟糕。

【讨论】:

其实,一个大的源文件只是一种处理方式。与 Java 不同,您可以(几乎总是)做任何您想做的事,并以适合您需要的方式组织事物。当然,到处都有最佳实践和种子,但这取决于您。我认为有人对您的回答投了反对票,因为您提供的有关您所做工作的信息很少。也许这些模块被正确地导入并通过引用传递,也许不是。也许更好的解释或更多代码会有所帮助。

以上是关于如何构建 Node/Angular/Socket.io 项目?的主要内容,如果未能解决你的问题,请参考以下文章

清理构建时如何防止删除构建目录?

Eclipse + CDT:如何批量构建多个构建配置

如何防止云构建并行运行构建?

如何在成功发布构建时触发快照构建?

在maven中构建模块时如何构建依赖项目

如何让 Intellij IDEA 使用并行和 gradle 构建缓存进行构建