浅谈使用nodejs搭建web服务器的过程


Posted in NodeJs onJuly 20, 2020

使用 Node 创建 Web 服务器

什么是 Web 服务器?

Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,Web服务器的基本功能就是提供Web信息浏览服务。它只需支持HTTP协议、HTML文档格式及URL,与客户端的网络浏览器配合。

大多数 web 服务器都支持服务端的脚本语言(php、python、ruby)等,并通过脚本语言从数据库获取数据,将结果返回给客户端浏览器。

目前最主流的三个Web服务器是Apache、Nginx、IIS。

Node.js 提供了 http 模块,http 模块主要用于搭建 HTTP 服务端和客户端,使用 HTTP 服务器或客户端功能必须调用 http 模块,代码如下:

var http = require('http');

在通常的服务器中,数据流通的方式是客户先通过浏览器进行发送请求,服务器在项目中进行查找,然后进客户所需要的页面进行返回,在查找的过程中可能存在两种情况,就是存在和不存在,当然,我们会做出判断,下面就是简单的服务器实现过程:

1、编写服务器代码server.js

var http=require('http');
var fs = require('fs');
var url = require('url');
 
//创建服务器
http.createServer(function(request,response) {
 //解析请求,包括文件名
 var pathname= url.parse(request.url).pathname;
 //输出请求的文件名
 console.log("Request for "+ pathname + " received.");
 
 //从文件系统中都去请求的文件内容
 fs.readFile(pathname.substr(1),function(err, data) {
 if(err) {
 console.log(err);
 //HTTP 状态码 404 : NOT FOUND
 //Content Type:text/plain
 response.writeHead(404,{'Content-Type': 'text/html'});
 }
 else {
 //HTTP 状态码 200 : OK
 //Content Type:text/plain
 response.writeHead(200,{'Content-Type': 'text/html'});
 
 //写会相应内容
 response.write(data.toString());
 }
 //发送响应数据
 response.end();
 });
}).listen(8081);
 
console.log('Server running at http://127.0.0.1:8081/');

通过上面代码,我们就能够实现服务器对于文件的查找,下面,我们就进行创建一个html文件,然后通过浏览器进行访问

2、编写html文件(index.html),用于浏览器进行请求

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>index</title>
</head>
<body>
 这是一个用于进行nodejs服务器测试的html文件,我们能够通过在浏览器上面输入
 http://127.0.0.1:8081/WebServer/index.html进行访问
</body>
</html>

创建完之后,我们进行测试,现在我的目录结构是这样的:

浅谈使用nodejs搭建web服务器的过程

3、进行测试

    (1) 首先我们启动服务器,使用命令node WebServer/server.js  
    (2) 在浏览器进行访问,在url栏中输入http://127.0.0.1:8081/WebServer/index.html   

其显示效果如下所示:

浅谈使用nodejs搭建web服务器的过程

后台效果如下所示:

浅谈使用nodejs搭建web服务器的过程

当然,我们也能够通过访问通过http://127.0.0.1:8081/LoveYou.html访问server.js文件夹外边的文件,进行到这里,我们就可以得到文件返回给前端,但是有些同学可能会问,样式该怎么做??如下面代码,我们进行了样式的定义,修改了两个div的大小,并且给div设置边框

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>index</title>
 <style>
 body {
 border: 1px solid red;
 }
 
 div {
 border-radius: 10px;
 width: 500px;
 height: 200px;
 border: 2px solid green;
 }
 </style>
</head>
<body>
这是一个用于进行nodejs服务器测试的html文件,我们能够通过在浏览器上面输入
http://127.0.0.1:8081/WebServer/index.html进行访问
<div>1</div>
<div>2</div>
</body>
</html>

效果如下所示

浅谈使用nodejs搭建web服务器的过程

有了这些,我们还会问,你这样直接将样式写在html中,我可不干,我要把样式写道另外单独一个文件中,然后通过引用的方式引入,于是就会有人使用下面代码:

<link rel="stylesheet" href="http://127.0.0.1:8081/WebServer/index.css" rel="external nofollow" >

然而,这段代码并不会起作用,因为传递给前端的方式Content-Type是有问题的,需要我们的服务器进行下一步操作,也就是处理静态文件。既然传给前端时需要告诉type是css,那么我们就进行区分对待,如下面代码,我们对server.js进行修改如下:

var http=require('http');
var fs = require('fs');
var url = require('url');
 
//创建服务器
http.createServer(function(request,response) {
 //解析请求,包括文件名
 var pathname= url.parse(request.url).pathname;
 //输出请求的文件名
 console.log("Request for "+ pathname + " received.");
 //当请求static文件夹时,设置文件返回类型是text/css
 var firstDir = pathname && pathname.split('/')[2];
 var ContentType = null;
 if (firstDir && firstDir === 'static') {
 ContentType = {'Content-Type': 'text/css'};
 } else {
 ContentType = {'Content-Type': 'text/html'}
 }
 
 //从文件系统中去请求的文件内容
 fs.readFile(pathname.substr(1),function(err, data) {
 if(err) {
 console.log(err);
 //HTTP 状态码 404 : NOT FOUND
 //Content Type:text/plain
 response.writeHead(404, {'Content-Type': 'text/html'});
 }
 else {
 //HTTP 状态码 200 : OK
 //Content Type:text/plain
 response.writeHead(200, ContentType);
 
 //写会回相应内容
 response.write(data.toString());
 }
 //发送响应数据
 response.end();
 });
}).listen(8081);
 
console.log('Server running at http://127.0.0.1:8081/');

接着,我们需要在项目中创建一个static文件夹,如下面所示结构:

浅谈使用nodejs搭建web服务器的过程

在static文件夹中创建index.css文件,代码内容如下所示:

body {
 border: 1px solid blue;
}
 
div {
 border-radius: 10px;
 width: 400px;
 height: 200px;
 border: 2px solid yellow;
}

也就是修改body边框为蓝色,div边框为黄色,同时我们需要更新index.html中文件内容如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>index</title>
 <link rel="stylesheet" href="http://127.0.0.1:8081/WebServer/static/index.css" rel="external nofollow" >
</head>
<body>
这是一个用于进行nodejs服务器测试的html文件,我们能够通过在浏览器上面输入
http://127.0.0.1:8081/WebServer/index.html进行访问
<div>1</div>
<div>2</div>
</body>
</html>

也就是通过引入的方式将样式引入到html文件中,然后在浏览器查看内容,效果如下所示:

浅谈使用nodejs搭建web服务器的过程

很明显,我们的样式已经通过引入的方式引进到html页面中了,同样的原理,我们能够进行将js也通过引入的方式进行使用,在这里我就不一一贴出代码了,看看效果如下所示:

浅谈使用nodejs搭建web服务器的过程

在上面效果中,当我点击2号div的时候,将会调用我在js文件夹中的方法去执行弹窗,详细代码请到github下载:https://github.com/suwu150/node-http-server

使用 Node 创建 Web 客户端

Node 创建 Web 客户端需要引入 http 模块,创建 client.js 文件,代码如下所示:

var http = require('http');
//用于请求的选项
var options = {
 host: 'localhost',
 port: '8081',
 path: '/WebServer/index.html'
};
 //处理响应的回调函数
var callback= function(response) {
 //不断更新数据
 var body = '';
 response.on('data',function(data) {
 body+=data;
 });
 response.on('end', function() {
 //数据接收完成
 console.log(body);
 });
};
//向服务器端发送请求
var req = http.request(options, callback);
req.end();

新打开终端,运行程序如下所示:

浅谈使用nodejs搭建web服务器的过程

对与服务器,可以参见我以前写过的服务器,其工作原理是一致的:https://3water.com/article/191240.htm 这是使用java进行写的服务器

到此这篇关于浅谈使用nodejs搭建web服务器的过程的文章就介绍到这了,更多相关nodejs搭建web服务器内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

NodeJs 相关文章推荐
golang、python、php、c++、c、java、Nodejs性能对比
Mar 12 NodeJs
NodeJS框架Express的模板视图机制分析
Jul 19 NodeJs
Nodejs实现多人同时在线移动鼠标的小游戏分享
Dec 06 NodeJs
Windows系统下使用Sublime搭建nodejs环境
Apr 13 NodeJs
Nodejs如何搭建Web服务器
Mar 28 NodeJs
NodeJS链接MySql数据库的操作方法
Jun 27 NodeJs
NodeJS实现视频转码的示例代码
Nov 18 NodeJs
Nodejs连接mysql并实现增、删、改、查操作的方法详解
Jan 04 NodeJs
NodeJS加密解密及node-rsa加密解密用法详解
Oct 12 NodeJs
Nodejs核心模块之net和http的使用详解
Apr 02 NodeJs
NodeJs 模仿SIP话机注册的方法
Jun 21 NodeJs
nodejs实现获取本地文件夹下图片信息功能示例
Jun 22 NodeJs
通过实例了解Nodejs模块系统及require机制
Jul 16 #NodeJs
Nodejs环境实现socket通信过程解析
Jul 03 #NodeJs
使用nodejs实现JSON文件自动转Excel的工具(推荐)
Jun 24 #NodeJs
nodejs各种姿势断点调试的方法
Jun 18 #NodeJs
在NodeJs中使用node-schedule增加定时器任务的方法
Jun 08 #NodeJs
nodeJS与MySQL实现分页数据以及倒序数据
Jun 05 #NodeJs
NodeJS多种创建WebSocket监听的方式(三种)
Jun 04 #NodeJs
You might like
php 301转向实现代码
2008/09/18 PHP
实例讲解yii2.0在php命令行中运行的步骤
2015/12/01 PHP
JavaScript 脚本将当地时间转换成其它时区
2009/03/19 Javascript
JQuery 绑定select标签的onchange事件,弹出选择的值,并实现跳转、传参
2011/01/06 Javascript
javascript使用location.search的示例
2013/11/05 Javascript
javascript获取当前鼠标坐标的方法
2015/01/10 Javascript
Node.js实用代码段之正确拼接Buffer
2016/03/17 Javascript
Bootstrap3制作图片轮播效果
2016/05/12 Javascript
jquery动态创建div与input的实例代码
2016/10/12 Javascript
详解webpack2+node+react+babel实现热加载(hmr)
2017/08/24 Javascript
如何编写一个完整的Angular4 FormText 组件
2017/11/18 Javascript
如何用原生js写一个弹窗消息提醒插件
2019/05/24 Javascript
layui问题之模拟table表格中的选中按钮选中事件的方法
2019/09/20 Javascript
[01:01]青春无憾,一战成名——DOTA2全国高校联赛开启
2018/02/25 DOTA
Python读写Excel文件的实例
2013/11/01 Python
Python下singleton模式的实现方法
2014/07/16 Python
跟老齐学Python之Import 模块
2014/10/13 Python
Django框架中数据的连锁查询和限制返回数据的方法
2015/07/17 Python
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
2017/07/20 Python
Python中numpy模块常见用法demo实例小结
2019/03/16 Python
Django 迁移、操作数据库的方法
2019/08/02 Python
Python实现手绘图效果实例分享
2020/07/22 Python
python os.rename实例用法详解
2020/12/06 Python
Python项目实战之使用Django框架实现支付宝付款功能
2021/02/23 Python
canvas离屏技术与放大镜实现代码示例
2018/08/31 HTML / CSS
韩国家庭购物网上商店:Nsmall
2017/05/07 全球购物
意大利在线大学图书馆:Libreria universitaria
2019/07/16 全球购物
是否可以从一个static方法内部发出对非static方法的调用?
2014/08/18 面试题
求职信模版
2013/11/30 职场文书
奶茶店创业计划书
2014/08/14 职场文书
优秀教师个人总结
2015/02/11 职场文书
2015年会计个人工作总结
2015/04/02 职场文书
银行客户经理培训心得体会
2016/01/09 职场文书
PHP使用QR Code生成二维码实例
2021/07/07 PHP
Python爬虫中urllib3与urllib的区别是什么
2021/07/21 Python
《战锤40K:暗潮》跳票至9月 公布新宣传片
2022/04/03 其他游戏