本文已参与「新人创作礼」活动,一起开启掘金创作之路。
文章目录
上一篇文章我们介绍了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');
还有需要注意的是,我们在测试的时候,点击终端的清理按键即可停掉服务