概述
开发node的初衷,就是开发一个非阻塞IO功能、高性能web服务器,所以node的HTTP模块是核心中核心。
简易的node服务器搭建
var http = require('http');
http.createServer(function (request, response){
response.writeHead(200, {'Content-Type': 'text/plain'});
response.write("Hello World");
response.end();
}).listen(3000, '127.0.0.1');
另一种写法
var http = require('http');
function onRequest(request,response){
response.writeHead(200,{"Content-type":"text/plain"});
response.write("hello wanggw");
response.end();
}
http.createServer(onRequest).listen(3000, '127.0.0.1')
//var server = http.createServer([requestListener]) :创建并返回一个HTTP服务器对象
//server.listen(port, [hostname], [backlog], [callback]) :监听客户端连接请求,只有当调用了 listen 方法以后,服务器才开始工作
//port : 监听的端口
//hostname : 主机名(IP/域名),可选
//backlog : 连接等待队列的最大长度,可选
//callback : 调用listen方法并成功开启监听以后,会触发一个 listening事件,callback将作为该事件的执行函数,可选
//request 对象
//参数request对象是 http.IncomingMessage 的一个实例,通过它 ,我们可以获取到这次请求的一些信息,比如头信息,数据,url参数等等
//常见参数:
//httpVersion: 使用的http协议的版本
//headers : 请求头信息中的数据
//url : 请求的地址
//method : 请求方式
//response 对象
//向该次请求的客户端输出返回响应。
//response.writeHead(statusCode, [reasonPhrase], [headers]):向请求回复响应头
//这个方法只能在当前请求中使用一次,并且必须在response.end()之前调用。
//statusCode: 一个三位数的HTTP状态码, 例如 404
//reasonPhrase:自行设置http响应状态码对应的原因短语
//headers:响应头的内容
//write(chunk, [encoding]) : 发送一个数据块到响应正文中 ,如果这个方法被调用但是 response.writeHead() 没有被调用,
//它将切换到默认header模式并更新默认的headers。chunk可以是字符串或者缓存。如果chunk 是一个字符串,
//第二个参数表明如何将这个字符串编码为一个比特流。默认的 encoding是'utf8'。
//end([data], [encoding]): 当所有的正文和头信息发送完成以后,调用该方法告诉服务器数据已经全部发送完成了。
//这个方法在每次完成信息发送以后必须调用,并且是最后调用,如果指定了参数 data ,
//就相当于先调用 response.write(data, encoding) 之后再调用 response.end()
//setHeader(name, value) : 为默认或者已存在的头设置一条单独的头信息:如果这个头已经存在于 将被送出的头中,将会覆盖原来的内容。
//如果设置更多的头, 就使用一个相同名字的字符串数组
//如:response.setHeader("Set-Cookie", ["type=ninja", "language=javascript"]);
以上代码第一行var http = require("http")就是表示引入了node的http模块,然后调用createServer方法,创造一个node服务器实例。
createServer方法中传入函数会自动执行,所以也称为请求处理函数,实际上createServer构造函数返回的server对象是一个EventEmitter(事件触发与事件监听器功能的封装);
备注:在编写时每次修改代码都需要重启服务,可以通过supervisor模块解决问题。
//安装
npm install -g supervisor
//启动
supervisor server.js