首先简单对比一下 php 与 nodejs之间的区别

菜鸟教程上写的很通俗易懂,拿过来:

如果我们使用PHP来编写后端的代码时,需要Apache 或者 Nginx 的HTTP 服务器,并配上 mod_php5 模块和php-cgi。
从这个角度看,整个"接收 HTTP 请求并提供 Web 页面"的需求根本不需 要 PHP 来处理。
不过对 Node.js 来说,概念完全不一样了。使用 Node.js 时,我们不仅仅 在实现一个应用,同时还实现了整个 HTTP 服务器。

举个例子,在写php的时候我们只要处理好逻辑就可以了,php执行遇到错误的时候浏览器会抛出。

可是在写nodejs的时候你会发现神奇的现象:

  1. nodejs有一个地方代码写错,程序直接崩了,浏览器直接500!!
  2. 程序没有处理好输出,直接就挂在那了!!

这是最常见的现象,因为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是一个基于事件的服务器(事件驱动就是这个意思),常用的监听事件有

  1. request:监听客户端请求,在回调函数中返回两个参数,req 和 res,分别代表请求和响应
  2. connection :监听TCP连接建立,在回调函数中返回参数 socket
  3. close:监听服务器关闭

我们常用的就是request事件,socket编程一般会用socket.io。

还要说一个关键的参数,就是request事件回调函数的res,负责响应客户端。如果没有用res处理响应,就会发生开头提到的那种现象,请求会挂起。介绍它的3个成员函数:

  1. res.writeHead(statusCode,[heasers]):发送客户端响应头
  2. res.write(data,[encoding]):发送客户端响应体(内容),可调用多次
  3. res.end():结束响应,否则请求会挂起

基本用法就这么多,入门必备


杨成功
3.9k 声望12k 粉丝

分享小厂可落地的前端工程与架构