首先简单对比一下 php 与 nodejs之间的区别
菜鸟教程上写的很通俗易懂,拿过来:
如果我们使用PHP来编写后端的代码时,需要Apache 或者 Nginx 的HTTP 服务器,并配上 mod_php5 模块和php-cgi。
从这个角度看,整个”接收 HTTP 请求并提供 Web 页面”的需求根本不需 要 PHP 来处理。
不过对 Node.js 来说,概念完全不一样了。使用 Node.js 时,我们不仅仅 在实现一个应用,同时还实现了整个 HTTP 服务器。
举个例子,在写php的时候我们只要处理好逻辑就可以了,php执行遇到错误的时候浏览器会抛出。
可是在写nodejs的时候你会发现神奇的现象:
- nodejs有一个地方代码写错,程序直接崩了,浏览器直接500!!
- 程序没有处理好输出,直接就挂在那了!!
这是最常见的现象,因为nodejs不依赖web服务器,它自身处理请求和响应
1. 解析 hollow world
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World\n');
}).listen(8080);
console.log('Server running at http://127.0.0.1:8080/');
代码中createServer
是一个快捷方法,还原之后是这样的:
var http = require("http");
var server = new http.Server();
server.on("request",function(req, res){
res.writeHead(200,{
"content-type":"text/plain"
});
res.write("hello World\n");
res.end();
});
server.listen(8080);
http模块中封装了一个Http服务器和一个Http客户端,分别对应http.Server()
和http.request()
。前者的作用是创建一个http服务器,后者的作用是对http服务器发起请求
所以createServer方法就是实例化一个 http.Server() 服务器,监听request事件,然后发出响应。同时监听8080端口
2. http.Server
http.Server是一个基于事件的服务器(事件驱动就是这个意思),常用的监听事件有
-
request
:监听客户端请求,在回调函数中返回两个参数,req 和 res,分别代表请求和响应 -
connection
:监听TCP连接建立,在回调函数中返回参数 socket -
close
:监听服务器关闭
我们常用的就是request
事件,socket编程一般会用socket.io。
还要说一个关键的参数,就是request事件回调函数的res
,负责响应客户端。如果没有用res处理响应,就会发生开头提到的那种现象,请求会挂起。介绍它的3个成员函数:
-
res.writeHead(statusCode,[heasers])
:发送客户端响应头 -
res.write(data,[encoding])
:发送客户端响应体(内容),可调用多次 -
res.end()
:结束响应,否则请求会挂起
基本用法就这么多,入门必备