Node.js后端开发 - 基础篇 #9 web 服务器 part 1 介绍

149 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。 ​

文章目录

web服务器请求和响应简单介绍

实现一个简单的web服务器

创建服务器实现监听响应纯文本

代码优化简洁


上一篇文章我们介绍了nodejs的流和管道,如:如何通过流去读取文件内容和写入数据到文件等。详见: Node.js后端开发 - 基础篇 #8 流和管道,这篇文章我们来介绍一下 http模块 ,它可以实现一个web服务器,那么什么是web服务器呢?

web服务器请求和响应简单介绍

我们用浏览器打开一个网址,如:www.baidu.com, 我们访问的就是web服务器,这个web服务器就是放在远程百度公司某个主机上的,那么我们的浏览器就是一个客户端,当我们在浏览器中输入网址的时候,其实已经向web服务器上发送了一个请求,这个请求带了一些参数给web服务器,比如一些请求头信息之类的,当web服务器接收到这个请之后,它就会进行处理,然后把响应信息传给浏览器,这样就做了一次完整的web请求!

然后我们在浏览器上就可以看到一些信息,如:请求地址、请求数据格式、编码、语言、cookie、服务器版本、请求内容等等

其他一些内容可以参考官方api:HTTP | Node.js v9.11.2 Documentation

实现一个简单的web服务器

之前的内容都是关于http协议的,它的内容我们不会讲的太深入,现在我们来实现一个简单的web服务器!

创建服务器实现监听响应纯文本

var http = require('http');//引入http库

//创建服务器
var server = http.createServer(function (request, response) {
    console.log('request received');
    //1、状态码  2、响应返回的内容类型
    response.writeHead(200, {'Content-type': 'text/plain'});

    //response.write('hello from server');
    //response.end();

    //这样写也可以,同上面两句
    response.end('hello from server');

    //另外 response.write 是可以写多个的,如下:
    // response.write('<html>');
    // response.write('<body>');
    // response.write('<h1>Hello, World!</h1>');
    // response.write('</body>');
    // response.write('</html>');
    // response.end();

});

//1、监听端口号  2、ip地址(这里是本地地址)
server.listen(3000, '127.0.0.1');
console.log('server started on localhost port 3000');

我们在终端,运行启动服务器进行监听,如下:

MacBook-Pro:hello-nodejs luminal$ node app
server started on localhost port 3000

然后我在谷歌浏览器中,输入地址:http://localhost:3000

这时候终端信息为如下

MacBook-Pro:hello-nodejs luminal$ node app
server started on localhost port 3000
request received
request received

为什么刷新会请求两遍?原因是浏览器默认会先发请一个标题图标的请求,即浏览器还会请求一次favicon.ico 所以是2遍

代码优化简洁

上面的代码我们一般是把函数提出来写的,所以代码可以这样写,如下:

var http = require('http');

var onRequest = function (request, response) {
    console.log('Request received');
    response.writeHead(200, { 'Content-Type': 'text/plain' });
    response.end('hello from server');
}

var server = http.createServer(onRequest);

server.listen(3000, '127.0.0.1');
console.log('server started on localhost port 3000');

还有需要注意的是,我们在测试的时候,点击终端的清理按键即可停掉服务