前言:

  如果我们使用PHP来编写后端的代码时,需要Apache 或者 Nginx 的HTTP 服务器,并配上 mod_php5 模块和php-cgi。

  从这个角度看,整个"接收 HTTP 请求并提供 Web 页面"的需求根本不需 要 PHP 来处理。

  不过对 Node.js 来说,概念完全不一样了。使用 Node.js 时,我们不仅仅 在实现一个应用,同时还实现了整个 HTTP 服务器。

  事实上,我们的 Web 应用以及对应的 Web 服务器基本上是一样的。


创建一个简单的HTTP服务器:

  这里我们使用创建文件,然后执行的方式,来创建此实例。

  在E:\NodejsDemo文件夹下,创建“server.js”文件,代码如下:

 var http = require("http");

 http.createServer(function(request,response){
     response.writeHead(200, {"Content-Type" : "text/plain"});
     response.end("Hello World!\n");
 }).listen(88);

 console.log("Server running at http://127.0.0.1:88/")

  上述代码中,我们先引入了http模块,并存入本地的http对象中。

  然后使用http对象创建一个服务,设置文档响应类型等,最后结束并返回响应一串字符串。

  启动监听在88端口。

  以上代码,我们已经完成了一个简单Node.js的HTTP服务器的创建。

  下面我们在DOS下使用node命令来运行它:

  

  此时,防火墙可能会提示,点击允许访问即可:

  

  然后、我们打开浏览器,访问地址:http://127.0.0.1:88,效果如下:

  

  看到这个界面了,是不是很鸡冻,哈哈。


强化案例:

  不知道大家是否了解类似于JSP、ASP.NET的运行机制。

  例如JSP,解析的时候,最后生成的是HTML源码文件,将源JSP文件中的代码一行行拼接输出。

  按照这个原理,我们能不能也实现一个HTML的服务器呢?

  主程序“main.js”的代码如下:

 var http = require("http");

 var html = "";
 html += "<!DOCTYPE html>";
 html += "<html>";
 html += "   <head>";
 html += "       <meta charset='utf-8' />";
 html += "       <title>孤影'Blog</title>";
 html += "       <style>body{background:black; color:#0F6; text-align:center; text-shadow:0px 0px 10px #0F6;}</style>";
 html += "   </head>";
 html += "   <body>";
 html += "       <h1>孤影'Blog</1>";
 html += "       <h2>Welcome to my blog!</h2>";
 html += "   </body>";
 html += "</html>";

 http.createServer(function (request, response) {
     response.writeHead(200, { "Content-Type": "text/html" });
     response.end(html);
 }).listen(88);

  OK、打开DOS、运行“node main.js”,效果如下:

  有没有脑洞大开?!呵呵。下山自行修炼去吧。哈哈。。


简单分析Node.js的HTTP服务器:

  这里,我奉承简单入门为主,所以就不做过多的介绍了,大家理解就好。

  W3C官方的解释如下:

  • 第一行请求(require)Node.js 自带的 http 模块,并且把它赋值给 http 变量。
  • 接下来我们调用 http 模块提供的函数: createServer 。这个函数会返回 一个对象,这个对象有一个叫做 listen 的方法,这个方法有一个数值参数, 指定这个 HTTP 服务器监听的端口号。

  个人介绍:

  1. require表示引入一个模块,在这里,我们引入的是系统的http模块,从而创建了一个http模块服务。
  2. 然后,我们把它赋值保存到了一个http对象中。
  3. 下面,我们使用该对象的createServer方法,执行了一个function函数。
  4. 该函数传入一个request和response的请求及响应对象,设置响应状态码为200,响应类型为text文本,响应内容为“Hello World!”。
  5. 最后,调用其“listen”方法,启动监听,监听端口为88。
  6. 命令结束的时候,我们输出了一段日志:“Server running at http://127.0.0.1:88”。

小结:

  我也是刚学,所以深刻体会,这个东西慢慢的理解就好,别太死扣语法了。循序渐进的而已。

  希望大家赶紧上手吧,呵呵。

Node.js 教程 03 - 创建HTTP服务器的更多相关文章

  1. Node.js 教程 01 - 简介、安装及配置

    系列目录: Node.js 教程 01 - 简介.安装及配置 Node.js 教程 02 - 经典的Hello World Node.js 教程 03 - 创建HTTP服务器 Node.js 教程 0 ...

  2. Node.js 教程 04 - 模块系统

    前言: Node.js的模块系统类似于C/C++的文件引用,可以声明对象,也可以定义类 创建对象. 大家这么理解,就简单了. 定义: 为了让Node.js的文件可以相互调用,Node.js提供了一个简 ...

  3. [转载]Node入门 » 一本全面的Node.js教程

    http://www.nodebeginner.org/index-zh-cn.html 作者: Manuel Kiessling 翻译: goddyzhao & GrayZhang & ...

  4. 【转载】Node.js 教程(菜鸟教程系列)

    很好的一篇教程:Node.js 教程 简单做下笔记 概述 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立 ...

  5. 10+ 最佳的 Node.js 教程和实例

    如果你正在找Node.js的学习资料及指南,那么请继续(阅读),我们的教程将会覆盖即时聊天应用.API服务编写.投票问卷应用.人物投票APP.社交授权. Node.js on Raspberry Pi ...

  6. Fenix – 基于 Node.js 的桌面静态 Web 服务器

    Fenix 是一个提供给开发人员使用的简单的桌面静态 Web 服务器,基于 Node.js 开发.您可以同时在上面运行任意数量的项目,特别适合前端开发人员使用. 您可以通过免费的 Node.js 控制 ...

  7. 实用的 Node.js 教程,工具和资源

    这里分享一批实用的实用的 Node.js 教程,工具和资源. Node.js是一个建立在Chrome之上的JavaScript运行时平台,可方便地构建快速,可扩展的网络应用程序.Node.js使用事件 ...

  8. node.js 学习03

    node.js学习03 解决浏览器接收服务端信息之后乱码的问题: 服务器通过设置http响应报文头,告诉浏览器使用相应的编码 来解析网页. res.setHeader('Content','text/ ...

  9. Node.js教程系列~目录

    Node.js这个东西在近几年火起来了,而且会一直火下去,无论在infoq还是在cnblogs,csdn上,都可以到处看到它的样子,它主推的应该就是异步式I/O 吧,是的,设计的很完美,很吸引人,虽然 ...

随机推荐

  1. .net垃圾回收机制编程调试试验

    1. 什么是CLR GC? 它是一个基于引用跟踪和代的垃圾回收器. 从本质上,它为系统中所有活跃对象都实现了一种引用跟踪模式,如果一个对象没有任何引用指向它,那么这个对象就被认为是垃圾对象,并且可以被 ...

  2. 我的公司培训讲义(1):.NET开发规范教程

    这是1年多以前我在公司所做讲座的讲义,现在与园友们分享,欢迎拿去使用.一起讨论.文中有若干思考题,对园友们是小菜一碟.另有设计模式讲义一篇,随后发布.博文上了首页,感谢博客园团队推荐,也感谢所有园友的 ...

  3. Linux Nano命令

    Nano命令指南 今天在输命令时,无意中输入了nano,对这个命令不太熟悉,结果不知道如何才能退出,保存,赶快查了一下资料,原来是这样的啊. 打开文件与新建文件 使用nano打开或新建文件,只需键入: ...

  4. 不使用Ajax,如何实现表单提交不刷新页面

    不使用Ajax,如何实现表单提交不刷新页面? 目前,我想到的是使用<iframe>,如果有其他的方式,后续再补. 举个栗子: 在表单上传文件的时候必须设置enctype="mul ...

  5. [Java定时器]用Spring Task实现一个简单的定时器.

    今天做一个项目的的时候需要用到定时器功能.具体需求是: 每个月一号触发一次某个类中的方法去拉取别人的接口获取上一个月份车险过期的用户.如若转载请附上原文链接:http://www.cnblogs.co ...

  6. python资料

    Python进阶 https://pythontips.com/ https://flyouting.gitbooks.io/learn-python-the-hard-way-cn/content/ ...

  7. lr文件下载脚本(文件参数化重命名)

    http://wenku.baidu.com/link?url=6oiIadyF9eFS4VshKbfJDnxrBh2IX919ndi0JO8yoqTRNRNIpavFrZJ9LPVb-FBSfbRY ...

  8. ASP.NET MVC5+EF6+EasyUI 后台管理系统(37)-文章发布系统④-百万级数据和千万级数据简单测试

    系列目录 我想测试EF在一百万条数据下的显示时间!这分数据应该有很多同学想要,看看EF的性能! 服务器 现在来向SQL2008R2插入1000000条数据吧 declare @i int; ; beg ...

  9. Android自定义控件之自定义ViewGroup实现标签云

    前言: 前面几篇讲了自定义控件绘制原理Android自定义控件之基本原理(一),自定义属性Android自定义控件之自定义属性(二),自定义组合控件Android自定义控件之自定义组合控件(三),常言 ...

  10. ITTC数据挖掘平台介绍(七)强化的数据库, 虚拟化,脚本编辑器

    一. 前言 好久没有更新博客了,最近一直在忙着找工作,目前差不多尘埃落定.特别期待而且准备的都很少能成功,反而是没怎么在意的最终反而能拿到,真是神一样的人生. 言归正传,一直以来,数据挖掘系统的数据类 ...