node.js 04 http server 初步

上一篇: 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作为Servlet Engine。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('<head><meta charset="utf-8"></head>')
response.write('你好,内容信息 <br>')

通过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('<head><meta charset="utf-8"></head>')
response.write('你好,内容信息 <br>')

response.end()

}).listen(8081);
console.log('Server running at http://127.0.0.1:8081/');

在命令行中直接运行该.js就可以了。

下一篇: node.js 05 包管理 npm

举报
评论 0