zoukankan      html  css  js  c++  java
  • 完善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/CSS3node.js
  • 相关阅读:
    追寻缺失的大学精神 一个民族需要关注天空的人
    图论简介
    18个分形图形的GIF动画演示
    平行宇宙
    eclipse经常出现——未响应!!!
    单例模式
    Java内存区域
    编译与解释(java)
    正则表达式判断QQ号格式是否正确
    正则表达式判断手机号格式是否正确
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2698393.html
Copyright © 2011-2022 走看看