上一篇: node.js 03 - 开发环境,Hello World
上一篇中我们的 Hello World 示例实际上已经用到了http server。考虑到操作的重要性,这一篇会先介绍http server, 后续再介绍 node.js 模块以及 npm 包管理工具。
创建http server
与其他服务端编程工具不一样的地方在于,node.js可以在程序中直接创建Http Server, 而不需要单独安装。
const http = require('http')
http.createServer(function (request, response) {
}).listen(8081);
在上面的代码中,一个Http Server就创建完成了。首先需要引入http模块,然后调用http模块中的createServer方法即可。
在createServer方法中有一个参数function(request, response),该参数为回调函数,对于浏览器发送过来的request的处理逻辑就在该函数中。
代码的末尾是Http Server的监听端口,这里我们使用了8081端口,和java Tomcat的8080端口区别开来。当然也可以使用其他端口。
如果把上面的代码与Java服务段代码相比,确实会简便很多,也不需要安装Tomcat或者Jetty作为ServletEngine。Java服务端框架SpringBoot也做了改动,整合了ServletEngine, 也可以通过简捷代码快速处理http请求。整体而言,node.js还是轻量快速很多。
处理http请求
对于request对象中包含了很多属性,重要的有以下一些
method: http请求方法,包括GET, POST, PUT, DELETE。与其他服务端语言对比,没有区别,都是对于http请求的建模。
url: 这个属性包括客户端发送的url以及后面的参数。这点,后面会有章节详细介绍,如何提取url中的参数。
headers:是对http请求头部的封装,包含cookie,浏览器等信息
httpVersion:HTTP版本信息。
在我们本节的例子中,对于request中的任意url, 我们可以返回默认的页面。
发送服务端响应 response
首先需要发送响应头信息
包括statusCode状态码,例如200表示服务请求成功。还包括content-type,用于指定内容类型,通常为"text/html",也可以在其中包含charset字符集。
response.writeHead(200, {'Content-Type': 'text/html;charset="utf-8"'});
响应头中还可以设定location,content-disposition,content-length,set-cookie,expires等等。这点和大部分服务端语言所提供的功能类似。
写入响应内容
response.write('')
response.write('你好,内容信息')
通过response.write()进行响应内容的设置,也就是返回给客户端的html页面中的内容。
第一行是为了与上面的http响应头中的字符集相对应,在html的head中也作了charset的设定。
结束响应
在写入响应内容后,需要添加下列代码来结束响应。否则浏览器会一直显示在刷新。
response.end()
到这里一个http请求的处理就完成了。
整体代码如下:
const http = require('http')
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/html;charset="utf-8"'});
response.write('')
response.write('你好,内容信息 ')
response.end()
}).listen(8081);
console.log('Server running at http://127.0.0.1:8081/');
在命令行中直接运行该.js就可以了。