如何构建 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.js
、socket.js
和index.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 项目?的主要内容,如果未能解决你的问题,请参考以下文章