好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

完善twitter

完善twitter

今天我们来完善twitter应用。首先回到昨天的例子。

 var  express = require('express' )
  var  app =  express()
app.get( '/',  function  (req, res) {
    res.send( 'Welcome to Node Twitter' )
})
app.listen( 8000)

  这里我们使用express模块来代替第一讲中使用的http模块,但其实express底层仍然使用到了http模块,它会帮我们完成服务器的创建和监听。完成express实例的创建之后,我们需要监听请求事件,这里我们使用get()方法,回调函数实现对请求类型为GET的请求的处理。接下来使用res.send()实现对客户端的相应,他集成了第一讲中res.writeHead();res.end();的功能。

  我们来做一个完善点的版本。

 var  express = require('express' );
  var  app =  express();
app.listen( 8000 );

  var  tweets= [];
app.get( '/', function  (req,res){
    res.send( 'welcome to node twitter.' );
});

app.post( '/send',express.bodyParser(), function  (req,res){
      if (req.body &&  req.body.tweet){
        tweets.push(req.body.tweet);
        res.send({status: 'ok',message:'Tweet received' });
    }  else  {
        res.send({status: 'nok',message:'no Tweet received' });
    }
});

app.get( '/tweets', function  (req,res){
    res.send(tweets);
}); 

  我们对之前的代码做了些修改,添加了针对send和tweets请求的处理,同时把app.listen(8000);移到了上面的位置。把app.listen()移到上面不会和下面的get或者post请求处理造成竞争。不存在这种情况,服务器已经开始监听但是get和post函数还没来得及运行,这段时间来自用户的请求会被忽略。这是因为javascript是基于事件循环的,新的事件直到完成对已有代码运行情况的评估后才会被调用。回到这个问题上,也就是说request事件直到我们完成其余代码初始化之后才会被执行。另外一个原因是app.listen()是异步方法,因为他去绑定tcp端口需要一些时间。而事件监听(get,post)是同步的。

  我们提供了三个处理请求的方法,app.post()包含三个参数,第二个参数可有可无,在这里express.bodyParser()实现把客户端请求获得的数据转换成js对象。express.bodyParser()为req添加了一个叫做req.body的属性,代表客户端传过来的数据。express.bodyParse()只为Content-Type为application/x-www-form-urlencoded 或者 application/json 的post请求工作,这两种情况下的数据都容易被转换成键值对的数据。该post事件最后返回json数据,并会为他添加合适的http请求头。

  文章最后提供了demo下载,用webstorm打开运行。代码有点丑陋,功能也相当的不完善,因为我也是刚接触node很多东西还不太清楚怎么弄,所以请大家见谅。站点的两个地址需要手工切换, http://localhost:3000/ , http://localhost:3000/tweets 。

  demo下载地址: twitter.zip

 

分类:  HTML5/CSS3 ,  node.js

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于完善twitter的详细内容...

  阅读:48次