node.js入门 - 4.完善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模块,它会帮我们完成服务器的创建和监听。

  今天我们来完善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

adpics.aspx?source=kbh1983&sourcesuninfo
目录
相关文章
|
1月前
|
JavaScript 前端开发 C语言
javascript基础入门
javascript基础入门
24 1
|
3月前
|
JSON JavaScript 前端开发
Danfo.js专题 - Danfo.js与Dnotebook简介与入门
Danfo.js专题 - Danfo.js与Dnotebook简介与入门
47 0
|
3月前
|
JSON JavaScript 前端开发
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)(下)
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)
49 2
|
2月前
|
JavaScript
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
27 0
|
2月前
|
消息中间件 Web App开发 JavaScript
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
72 0
|
3月前
|
JavaScript 前端开发 API
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)(下)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
35 0
|
2月前
|
前端开发 JavaScript
从零开始学习前端开发:HTML、CSS、JavaScript入门指南
【2月更文挑战第1天】本文将带领读者从零开始学习前端开发,介绍HTML、CSS和JavaScript的基础知识与应用,帮助读者快速入门前端开发领域。
64 1
|
2月前
|
JSON 前端开发 JavaScript
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)
35 0
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)
|
2月前
|
资源调度 JavaScript 关系型数据库
Node.js【文件系统模块、路径模块 、连接 MySQL、nodemon、操作 MySQL】(三)-全面详解(学习总结---从入门到深化)
Node.js【文件系统模块、路径模块 、连接 MySQL、nodemon、操作 MySQL】(三)-全面详解(学习总结---从入门到深化)
33 0
|
3月前
|
存储 XML JavaScript
JavaScript基本语法:从入门到精通
JavaScript基本语法:从入门到精通
59 1