轻松创建nodejs服务器(2):nodejs服务器的构成分析


Posted in NodeJs onDecember 18, 2014

紧接上一节,我们来分析一下代码:

第一行请求(require)Node.js自带的 http 模块,并且把它赋值给 http 变量。

接下来我们调用http模块提供的函数: createServer 。

这个函数会返回一个对象,这个对象有一个叫做 listen 的方法,这个方法有一个数值参数,指定这个HTTP服务器监听的端口号。

为了提高可读性,我们来改一下这段代码。

原来的代码:

var http = require("http");

http.createServer(function(request, response) { 

 response.writeHead(200, {"Content-Type": "text/plain"}); 

 response.write("Hello World"); 

 response.end(); 

}).listen(8888);

可以改写成:

var http = require("http"); 

function onRequest(request, response) { 

 response.writeHead(200, {"Content-Type": "text/plain"}); 

 response.write("Hello World"); 

 response.end();

} 

http.createServer(onRequest).listen(8888);

我们定义了一个onRequest()函数,并将它作为参数传给createServer,类似回调函数。

我们给某个方法传递了一个函数,这个方法在有相应事件发生时调用这个函数来进行回调,我们把这叫做基于事件驱动的回调。

接下来我们看一下onRequest() 的主体部分,当回调启动,我们的 onRequest() 函数被触发的时候,有两个参数被传入: request 和 response 。

request : 收到的请求信息;

response : 收到请求后做出的响应。

所以这段代码所执行的操作就是:

当收到请求时,

1、使用 response.writeHead() 函数发送一个HTTP状态200 和 HTTP头的内容类型(content-type)

2、使用 response.write() 函数在HTTP相应主体中发送文本“Hello World”。

3、调用 response.end() 完成响应。

这样分析,是不是加深了你对这段代码的理解呢?

下一节我们来了解一下,nodejs的代码模块化。

NodeJs 相关文章推荐
NodeJs中的VM模块详解
May 06 NodeJs
Highcharts+NodeJS搭建数据可视化平台示例
Jan 01 NodeJs
详解nodejs爬虫程序解决gbk等中文编码问题
Apr 06 NodeJs
nodejs连接mysql数据库简单封装示例-mysql模块
Apr 10 NodeJs
nodejs入门教程四:URL相关模块用法分析
Apr 24 NodeJs
NodeJS实现图片上传代码(Express)
Jun 30 NodeJs
用Electron写个带界面的nodejs爬虫的实现方法
Jan 29 NodeJs
nodejs读取图片返回给浏览器显示
Jul 25 NodeJs
Nodejs封装类似express框架的路由实例详解
Jan 05 NodeJs
NodeJS和浏览器中this关键字的不同之处
Mar 03 NodeJs
Node.js实现爬取网站图片的示例代码
Apr 04 NodeJs
分享五个Node.js开发的优秀实践 
Apr 07 NodeJs
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
Dec 18 #NodeJs
Nodejs实现多人同时在线移动鼠标的小游戏分享
Dec 06 #NodeJs
Nodejs实现的一个静态服务器实例
Dec 06 #NodeJs
nodejs中简单实现Javascript Promise机制的实例
Dec 06 #NodeJs
nodejs实现的一个简单聊天室功能分享
Dec 06 #NodeJs
详谈nodejs异步编程
Dec 04 #NodeJs
nodejs下打包模块archiver详解
Dec 03 #NodeJs
You might like
PHP入门教程之PHP操作MySQL的方法分析
2016/09/11 PHP
提高代码性能技巧谈—以创建千行表格为例
2006/07/01 Javascript
深入分析js中的constructor和prototype
2012/04/07 Javascript
PHP abstract与interface之间的区别
2013/11/11 Javascript
JQuery解析XML的方法小结
2016/04/02 Javascript
JavaScript的instanceof运算符学习教程
2016/06/08 Javascript
js实现适合新闻类图片的轮播效果
2017/02/05 Javascript
vue父组件中获取子组件中的数据(实例讲解)
2017/09/27 Javascript
React组件refs的使用详解
2018/02/09 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
2018/03/14 Javascript
详解webpack打包后如何调试的方法步骤
2018/11/07 Javascript
Node.js如何优雅的封装一个实用函数的npm包的方法
2019/04/29 Javascript
angula中使用iframe点击后不执行变更检测的问题
2020/05/10 Javascript
vue 实现把路由单独分离出来
2020/08/13 Javascript
如何在vue中使用video.js播放m3u8格式的视频
2021/02/01 Vue.js
[47:03]Ti4第二日主赛事败者组 LGD vs iG 2
2014/07/21 DOTA
[08:06]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant 选手采访
2021/03/11 DOTA
python网页请求urllib2模块简单封装代码
2014/02/07 Python
Python实现针对含中文字符串的截取功能示例
2017/09/22 Python
Python基于列表list实现的CRUD操作功能示例
2018/01/05 Python
Python实现对文件进行单词划分并去重排序操作示例
2018/07/10 Python
Python实现对特定列表进行从小到大排序操作示例
2019/02/11 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
2019/08/09 Python
如何利用pygame实现简单的五子棋游戏
2019/12/29 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
2020/04/08 Python
python删除指定列或多列单个或多个内容实例
2020/06/28 Python
实现CSS3中的border-radius(边框圆角)示例代码
2013/07/19 HTML / CSS
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
UNIX文件名称有什么规定
2013/03/25 面试题
师德学习感言
2014/01/31 职场文书
市场营销大学生职业规划书
2014/02/25 职场文书
本科毕业生自荐信
2014/06/02 职场文书
医生爱岗敬业演讲稿
2014/08/26 职场文书
音乐教师个人总结
2015/02/06 职场文书
毕业论文致谢词
2015/05/14 职场文书
2015年艾滋病防治工作总结
2015/05/22 职场文书