摸石头——Node.Js(三)

一、完成HelloWorld

    上回我们说到,使用 node.js ,我们可以迅速架起一个 http 服务器。不过上次咱们仅仅是在后台看到了客户端发来了访问,还没把  “Hello World” 给发出去呢。好,说干就干。

    大家都明白,我们的Web应用抽象起来就是客户端发出请求,请求到达服务器后,服务器经过一番捣鼓,给客户端发回一个应答。“请求”我们一般抽象成 request,“应答”是 response。服务器和客户端(一般也就是浏览器啦,但是绝不局限于浏览器哦。)之间交流的语言就是 HTTP 协议了。至于服务器怎么折腾出一个应答来的,就八仙过海,各显神通了。

    总之,Web 应用中两个重量级的东东就是: Request , Response 。

    前面我们说到,每次有访问进来,我们的代码都会跑一遍。现在的问题是,在我们的代码里,怎么抓到客户端发来的 request , 然后,到哪里去找这个 response ,好把我们捣鼓出来的东西放进去,发给客户端呢?答案是,只要我们把他们作为参数交给 tellme 函数(你可以给这个函数取任何名字甚至不给他名字),然后,当请求到达时,node.js 就会把客户的请求封装成 request ,预备发给客户的应答封装成 response 。我们拿到 request ,看看他请求些什么,再折腾些东西(读出个文件也好,去查数据库也好,随便你了。)丢进 response ,发给客户端。

提醒:这种利用参数进行传递是 node.js 的常态。

请看代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* Request and Response */
 
var  http = require( 'http' );
 
http.createServer(
 
function (request, //客户端发来的请求,node.js 帮我们封装成 request 对象
          response //我们利用response,向客户端发送回答
          ){
     //在控制台显示request对象
     console.log(request);
     //总算完成 hello world 了。
     response.end( 'Hello world!' );
 
}).listen(888);
 
console.log( 'Server start at 888' );

运行他,用浏览器访问他。现在,在浏览器得到了咱们盼望已久的“Hello world!”,真不容易啊。再看看服务器的控制台,这么一大串的是什么?这个就是 Request 了。如果您熟悉 Json 格式,我想您已经看明白了,不熟悉也没关系,其实很简单,无非就是花括号( {} )标示对象,对象里各个属性用逗号( , )隔开,每个属性都由一个“键”和一个“值”组成,中间用冒号 ( : )分开,是不是很简单呢。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{ socket:{ ... },
   ...
   headers:   { host: 'localhost:888' ,
      connection: 'keep-alive' ,
      'cache-control' : 'max-age=0' ,
      'user-agent' : 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1 CoolNovoChromePlus/1.6.4.30' ,
      accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' ,
      'accept-encoding' : 'gzip,deflate,sdch' ,
      'accept-language' : 'zh-CN,zh;q=0.8' ,
      'accept-charset' : 'GBK,utf-8;q=0.7,*;q=0.3'  },
 
   ...
    url: '/' ,
    method: 'GET' ,
    ...
}

 

    观察 request 对象,我们可以找到一些我们熟悉的东西。比如:request.url、request.method、比如 headers 。好,下面我们来把后台让我们眼花缭乱的输出简化一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
/* Request and Response */
 
var  http = require( 'http' );
http.createServer(
function (request,  response ){
     //只显示request对象的某几个属性
     console.log(request.url);
     console.log(request.headers[ 'user-agent' ]);
     //回应客户端
     response.end( 'Hello world!' );
}).listen(888);
 
console.log( 'Server start at 888' );

    重启服务,访问服务器,观察后台。发现我们每刷新一次浏览器,其实进来了两个request,一个是访问’/’的,另一个是找 ‘favicon.ico ' 的,当然,很抱歉,目前还没有这个网站图标给他。控制台还显示了客户端用来访问服务器的浏览器的类型和版本。如果还想知道些什么,自己去 request 里面去挖吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值