@@ -21,18 +21,18 @@ Angular.js是新一代前端MVC框架。与Backbone.js相比,它完全实现
2121
2222### 开始
2323
24- 新建` TechNode ` 目录,使用 ` npm init ` 初始化, 生成` package.json ` 文件:
24+ 新建` TechNode ` 目录,我们所有的代码都会放在这个目录中。使用命令 ` npm init ` 初始化项目, 生成` package.json ` 文件:
2525
2626```
2727$ mkdir TechNode && cd TechNode && npm init
2828```
2929
30- 有了package.json文件,我们就可以轻松地管理项目的依赖 。
30+ > Node.js使用package.json来作为模块的描述文件,与模块相关的信息,比如模块名、作者、依赖的模块信息都会放在这个文件当中。 有了package.json文件,我们可以非常方便地使用 ` npm ` 来做依赖模块管理 。
3131
3232
33- ### 使用express搭建服务器
33+ ### express.js服务器
3434
35- 想必你应该很清楚如何使用express搭建服务器了,下面是TechNode的服务器,文件名为app.js,直接放在TechNode下面 :
35+ 我们可以很轻松地使用express.js搭建一个Node.js服务器。在TechNode目录下新建app.js文件,添加如下代码 :
3636
3737```
3838var express = require('express')
@@ -51,25 +51,20 @@ io.sockets.on('connection', function (socket) {
5151 socket.emit('connected')
5252})
5353
54- console.log('TechNode is on port ' + port + '!')
54+ console.log('TechNode is on port ' + port + '!')
5555```
5656
57-
58- 我们将静态文件放在` staitc ` 目录下,包括` index.html ` ,我们不使用` jade ` 来生成html页面,而是直接使用html文件。
57+ 虽然这段代码非常简单,但是我需要指出其中的一些约定:
5958
6059```
6160app.use(express.static(__dirname + '/static'))
62- ```
6361
64- 除了静态文件的请求意外,其他所有的HTTP请求,我们都转发到` index.html ` ,服务端不关心路由,所有的路由逻辑都交给客户端的Angular.js去处理。
65-
66- ```
6762app.use(function (req, res) {
6863 res.sendfile('./static/index.html')
6964})
7065```
7166
72- 接下来就是建立服务端与浏览器端的socket服务。socket.io的API是基于事件的,我们监听着 ` connected ` 事件,如果有客户端链接上来,我们就可以获得一个socket对象,这样我们就可以和这个客户端实时通信了 。
67+ 与通常的express.js项目一样,我们将静态文件放在 ` static ` 目录下;在 ` static ` 目录下还会放 ` index.html ` 文件,它将会作为整个应用的启动页面。除了静态文件的请求以外,其他所有的HTTP请求,我们都会输出 ` index.html ` 文件,服务端不关心路由,所有的路由逻辑都交给在浏览器端的Angular.js去处理 。
7368
7469```
7570var io = require('socket.io').listen(app.listen(port))
@@ -79,11 +74,13 @@ io.sockets.on('connection', function (socket) {
7974})
8075```
8176
82- 新建` static ` 目录,添加` index.html ` 文件:
77+ 下一步就是在服务端添加` socket ` 服务。` socket.io ` 提供的接口是基于事件的,服务器端监听` connected ` 事件,如果有客户端链接上来,就会产生一个socket对象,使用这个对象,我们就可以和对应的客户端实时通信了。
78+
79+ 在` TechNode ` 下新建` static ` 目录,添加` index.html ` 文件到` static ` 目录中:
8380
8481```
8582<!doctype html>
86- <html lang="en" >
83+ <html>
8784 <head>
8885 <meta charset="UTF-8">
8986 <title>TechNode</title>
@@ -100,7 +97,7 @@ io.sockets.on('connection', function (socket) {
10097</html>
10198```
10299
103- 为了与服务端的socket.io通信,我们必须在客户端引入socket.io提供的客户端代码 ` socket.io.js ` 。这个文件并不是我们手动添加到 ` static ` 目录的, socket.io自己响应了这个请求。当然,你可以将这个文件保存下来,从别的地方引用 。
100+ 为了与服务端的socket服务通信,我们必须在客户端引入 ` socket.io ` 提供的客户端类库 ` socket.io.js ` 。这个文件由 ` socket.io ` 提供服务,我们无需把这个文件添加到 ` static ` 目录中 。
104101
105102```
106103var socket = io.connect('/')
@@ -109,59 +106,63 @@ socket.on('connected', function () {
109106})
110107```
111108
112- 调用` io. connect ` ,传入socket服务器 ,因为在本例中,socket服务器与静态服务器是同一个,可以简写为` / ` (实际上相当于` http://localhost:3000 ` ),获得一个socket对象,然后就可以和服务端通信了 。
109+ 调用` io ` 的 ` connect ` 方法,传入socket服务的地址 ,因为在本例中,socket服务器与静态服务器是同一个,可以简写为` / ` (实际上相当于` http://localhost:3000 ` ),然后我们就获得了一个socket对象,这样就可以和服务端通信了 。
113110
114111
115- 别忘了使用` npm install express socket.io --save ` 安装` express ` 和` socket.io ` ,参数` --save ` 可以自动更新package.json文件,将express和socket.io的依赖加进去 。
112+ 别忘了使用` npm install express socket.io --save ` 安装` express ` 和` socket.io ` ,参数` --save ` 可以自动更新package.json ` 文件,将 ` express ` 和 ` socket.io ` 作为项目依赖添加到 ` package.json`中 。
116113
117- 服务器搭建好了 ,运行:
114+ 到这里,最基础的服务端已经搭建完成了 ,运行:
118115
119116```
120117$ node app.js
118+
119+ TechNode is on port 3000!
121120```
122121
123- ` TechNode is on port 3000! ` , 访问` http://localhost:3000 ` ,试试看。
122+ 访问` http://localhost:3000 ` ,试试看。
124123
125124### 最简单的聊天室
126125
127- #### 使用Bootstrap和Angular .js
126+ #### 安装Bootstrap和Angular .js
128127
129- 我们使用` bower ` 来做前端类库的管理,首先新建 ` bower.json ` 文件,用来管理TechNode前端依赖的第三方库,运行 ` bower init ` 命令,回答一些问题,可以自动帮你生成bower.json文件 。
128+ 我们使用` bower ` 来管理TechNode使用到的前端类库,与 ` npm ` 类似, ` bower ` 使用名为 ` bower .json` 的文件来管理项目的依赖。在 ` TechNode ` 目录下运行 ` bower init ` ,生成 ` bower.json ` 文件 。
130129
131- 新建.bowerrc文件 ,添加如下内容,为bower指定包的安装目录 :
130+ ` bower ` 默认将依赖的模块安装在 ` bower_compoments ` 下,为了便于管理,新建 ` .bowerrc ` 文件 ,添加如下内容,为bower指定依赖的安装目录 :
132131
133132```
134133{
135134 "directory" : "static/components"
136135}
137136```
138137
139- 接下来,试用` bower ` 安装我们需要的一些前端组件 :
138+ 接下来,试用` bower ` 安装我们需要的一些前端类库 :
140139
141- - bootstrap :快速构建web项目的前端UI库,包含了jquery ;
142- - angular :我们的主角,前端MVC框架。
140+ - Bootstrap :快速构建web项目的前端UI库,依赖jQuery, ` bower ` 在安装Bootstrap的同时,也会安装jQuery ;
141+ - Angular.js :我们的主角,前端MVC框架。
143142
144143```
145144bower install bootstrap angular --save
146145```
147146
148- 将这些类库引入到index.html中:
147+ > ` --save ` 参数使得` bower ` 将依赖写入到` bower.json ` 中。
148+
149+ 将这些类库添加到` index.html ` 中:
149150
150151```
151152<head>
152153 <meta charset="UTF-8">
153154 <title>TechNode</title>
154- <link rel="stylesheet" href="/components/bootstrap/dist/css/bootstrap.min. css">
155+ <link rel="stylesheet" href="/components/bootstrap/dist/css/bootstrap.css">
155156 <script type="text/javascript" src="/socket.io/socket.io.js"></script>
156157 <script type="text/javascript" src="/components/jquery/jquery.js"></script>
157- <script type="text/javascript" src="/components/bootstrap/dist/js/bootstrap.min. js"></script>
158+ <script type="text/javascript" src="/components/bootstrap/dist/js/bootstrap.js"></script>
158159 <script type="text/javascript" src="/components/angular/angular.js"></script>
159160</head>
160161```
161162
162163#### 搭建聊天室
163164
164- 使用html和angular将TechNode的外观搭建出来 :
165+ 首先,使用html将TechNode的外观搭建出来 :
165166
166167```
167168<head>
@@ -198,36 +199,34 @@ bower install bootstrap angular --save
198199 ...
199200```
200201
201- 新建styles文件夹,将房间的样式放到room.css文件中,最简单的TechNode聊天室就像下面这样 :
202+ 在 ` static ` 目录下新建 ` styles ` 目录,新建房间样式文件 ` room.css ` ,下面就是最简版的TechNode :
202203
203204![ TechNode] ( ./examples/chapter01/images/simplest-technode.png )
204205
205206
206- 我们首先实现聊天室最简单的功能——发送消息和显示消息 !
207+ 接下来我们实现聊天室最基本的功能——消息 !
207208
208- 修改app.js中socket通信的部分 :
209+ 打开app.js文件,修改socket服务部分代码 :
209210
210211```
211212// ...
212213var messages = []
213214
214215io.sockets.on('connection', function (socket) {
215- socket.on('messages.read ', function () {
216- socket.emit('messages.read ', messages)
216+ socket.on('getAllMessages ', function () {
217+ socket.emit('allMessages ', messages)
217218 })
218- socket.on('messages.create ', function (message) {
219+ socket.on('createMessage ', function (message) {
219220 messages.push(message)
220- io.sockets.emit('messages.add ', message)
221+ io.sockets.emit('messageAdded ', message)
221222 })
222223})
223224// ...
224225```
225226
226- 我们是先使用messages这个内存对象来存放消息内容。
227- 用户连上来后,向服务器发送messages.read的请求,获取消息,我们将所有的消息返回给用户;
228- 当用户新建消息时,messages.create,我们把消息存放到messages中,并向所有的客户端广播有消息添加进来了。
227+ 我们暂时把消息数据放到` messages ` 这个数组对象中。用户连上来后,向服务端发送` getAllMessages ` 请求,获取所有消息,服务器就把所有的消息通过` allMessages ` 事件推送给客户端;当用户创建消息时,向服务端发送` createMessage ` 事件,服务端把消息存放到` messages ` 数组中,并向所有的客户端广播` messageAdded ` ,有新的消息添加进来。
229228
230- 下一步,开始使用angular来构建我们的聊天室吧 。
229+ 下一步,使用Angular.js构建聊天室的客户端 。
231230
232231修改index.html,加上angular了的绑定,添加一个新的js文件technode.js到页面上:
233232
0 commit comments