使用nodejs搭建一个简单的web服务器

一像素      2022-02-13     238

关键词:

使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块、文件系统、url解析模块、路径解析模块、以及301重定向问题,下面我们就简单讲一下如何来搭建一个简单的Web服务器。

 

作为一个Web服务器应具备以下几个功能:

1、能显示以.html/.htm结尾的Web页面

2、能直接打开以.js/.css/.json/.text结尾的文件内容

3、显示图片资源

4、自动下载以.apk/.docx/.zip结尾的文件

5、形如http://xxx.com/a/b/ , 则查找b目录下是否有index.html,如果有就显示,如果没有就列出该目录下的所有文件及文件夹,并可以进一步访问。

6、形如http://xxx.com/a/b,  则作301重定向到http://xxx.com/a/b/ , 这样可以解决内部资源引用错位的问题。

 

引入需要用到的几个模块:

//http协议模块
var http = require(‘http‘);
//url解析模块
var url = require(‘url‘);
//文件系统模块
var fs = require("fs");
//路径解析模块
var path = require("path");

创建服务并在指定的端口监听:

//创建一个服务
var httpServer = http.createServer(this.processRequest.bind(this));

//在指定的端口监听服务
httpServer.listen(port,function(){
    console.log("[HttpServer][Start]","runing at http://"+ip+":"+port+"/");
    console.timeEnd("[HttpServer][Start]");
});

在创建服务的时候需要传递一个匿名函数processRequest 对请求进行处理,processRequest接收2个参数,分别是request和response, request对象中包含了请求的所有内容,request是用来设置响应头以及对客户端做出响应操作。

processRequest:function(request,response){
    var hasExt = true;
    var requestUrl = request.url;
    var pathName = url.parse(requestUrl).pathname;

    //对请求的路径进行解码,防止中文乱码
    pathName = decodeURI(pathName);

    //如果路径中没有扩展名
    if(path.extname(pathName) === ‘‘){
        //如果不是以/结尾的,加/并作301重定向
        if (pathName.charAt(pathName.length-1) != "/"){
            pathName += "/";
            var redirect = "http://"+request.headers.host + pathName;
            response.writeHead(301, {
                location:redirect
            });
            response.end();
        }
        //添加默认的访问页面,但这个页面不一定存在,后面会处理
        pathName += "index.html";
        hasExt = false; //标记默认页面是程序自动添加的
    }

    //获取资源文件的相对路径
    var filePath = path.join("http/webroot",pathName);

    //获取对应文件的文档类型
    var contentType = this.getContentType(filePath);

    //如果文件名存在
    fs.exists(filePath,function(exists){
        if(exists){
            response.writeHead(200, {"content-type":contentType});
            var stream = fs.createReadStream(filePath,{flags:"r",encoding:null});
            stream.on("error", function() {
                response.writeHead(500,{"content-type": "text/html"});
                response.end("<h1>500 Server Error</h1>");
            });
            //返回文件内容
            stream.pipe(response);
        }else { //文件名不存在的情况
            if(hasExt){
                //如果这个文件不是程序自动添加的,直接返回404
                response.writeHead(404, {"content-type": "text/html"});
                response.end("<h1>404 Not Found</h1>");
            }else {
                //如果文件是程序自动添加的且不存在,则表示用户希望访问的是该目录下的文件列表
                var html = "<head><meta charset=‘utf-8‘></head>";

                try{
                    //用户访问目录
                    var filedir = filePath.substring(0,filePath.lastIndexOf(‘\‘));
                    //获取用户访问路径下的文件列表
                    var files = fs.readdirSync(filedir);
                    //将访问路径下的所以文件一一列举出来,并添加超链接,以便用户进一步访问
                    for(var i in files){
                        var filename = files[i];
                        html += "<div><a  href=‘"+filename+"‘>"+filename+"</a></div>";
                    }
                }catch (e){
                    html += "<h1>您访问的目录不存在</h1>"
                }
                response.writeHead(200, {"content-type": "text/html"});
                response.end(html);
            }
        }
    });
},

请求处理函数中有几个重点需要说一下:

对于路径中有中文的,浏览器会自动进行编码(英文不变,中文会变),因此在接收到地址后,需要对地址进行解码,否则最后得到的路径和真实路径不相符,

当访问路径不是以具体的文件结尾,并且不是以/结尾,则需要通过重定向加上/,表示当前目录,否则当前路径下的静态资源会找不到

如果访问路径是目录,则列出该目录下所有文件及文件夹,并可以点击访问,为了让中文目录能正常显示,则还要在header中设置charset=utf-8

技术分享

核心代码就这么多,大概140行左右,完整的代码已上传到Git:https://github.com/git-onepixel/Node,  

查看演示:http://onepixel.top:8888/ 

如有问题,欢迎讨论!

 

nodejs搭建web服务器就是这么简单!

...es.end("hellonodejs"););server.listen(port,hostName,function()console.log(`服务器运行在http://$hostName:$port`););短短几行代码就把一个简单的web服务器搭建完成了,为了验证效果,我们在浏览器请求,结果如下运行成功!到此为止,一个web服务器就... 查看详情

如何使用nodejs搭建一个简单的https服务器(代码片段)

为什么要使用HTTPS服务个人隐私以及安全的原因https是未来的趋势HTTPS的组成HTTPS=HTTP+TLS/SSL简单来说在http上套上了一层加密的ssl层HTTPS的基本原理Nodejs搭建HTTPS服务生成HTTPS证书引入HTTPS模块指定证书位置,并创建https服务实战案例... 查看详情

nodejs搭建简单web服务器!!

varhttp=require("http"),url=require("url"),path=require("path"),fs=require("fs");http.createServer(function(req,res){varpathname=__dirname+url.parse(req.url).pathname;if(path.extname(pathname)==""){pa 查看详情

jsonserver的简单使用(附:使用nodejs快速搭建本地服务器)

...后台数据,我们称之为mock。通常的方式为自己搭建一个服务器,返回我们想要的数据。jsonserver 作为工具,因为它足够简单,写少量数据,即可使用。安装首先需要安装nodejs,建议使用最新版本。然后全局安装jsonserver.npminsta... 查看详情

用nodejs搭建一个简单的服务器

使用nodejs搭建一个简单的服务器nodejs优点:性能高(读写文件)数据操作能力强官网:www.nodejs.org 验证是否安装成功:cmd命令行中输入node-v 如果显示版本号表示安装成功【常用命令】切换盘符d:进入文件夹cdnodejs返回上一级目录... 查看详情

使用nodejs开发一个最简单的web服务器(代码片段)

开发一个最简单的http服务require引入http模块创建http服务侦听端口实战案例vimserver.js//使用JavaScript最严格的语法,防止出现一些问题'usestrict'//引入http模块varhttp=require("http");//创建一个服务varapp=http.createServer(function(req... 查看详情

nodejs之我的开源module使用express搭建web服务器,代码即文档的实现。

前言  都说nodejs适合制作restful_API,因为它有异步处理能力,能吞吐更多的请求,这一点是大家都认可的。前不久我使用nodejs+express+postgresql搭建了一个restful中间处理平台,感觉express的api在代码量多的时候,显得凌乱。然后我... 查看详情

如何用nodejs搭建web服务器

参考技术A使用Node.js搭建Web服务器是学习Node.js比较全面的入门教程,因为实现Web服务器需要用到几个比较重要的模块:http模块、文件系统、url解析模块、路径解析模块、以及301重定向技术等,下面我们就一起来学习如何搭建一... 查看详情

如何使用nodejs快速搭建本地服务器

express+mongodb可以快速建站,nodejs自己也有http模块,直接listen一个端口,localhost:端口号就可以访问了参考技术Anode.js快速搭建网站可以使用一些web框架1:使用express2:使用koa如果开发工具使用的是webstorm的话,该工具内部就可以创... 查看详情

使用go搭建一个简单的web服务器预防跨站脚本(代码片段)

1.登陆页面<html><head><title>login</title></head><body><formaction="http://127.0.0.1:9090/login"method="post">用户名:<inputtype="text"name="username">密码:<in 查看详情

web前端效率提升-nginx+nodejs搭建本地生态

...要绑定假数据写死在js里面,感觉非常被动,后台接口、服务器出个错什么的,我的进度就要被拖延,返回的格式不友好,或者返回的格式和传递的格式不一样的时候,我还要转格式。人家拍拍屁股说接口写好了, 查看详情

带你用go搭建一个最简单的web服务了解golang运行web的原理

...文件、模板、Cookie等数据进行设置和操作。http包建立Web服务器先贴个go代码 查看详情

nodejs搭建简单服务器

实现简单的例子:helloword把第一个文件命名为server.js在server.js里写入varhttp =require("http");http.createServer(function(request,response){   response.writeHead(200,{"Content-Type":"text/plain"});  查看详情

nodejs实现服务端与客户端简单通信(代码片段)

通过Nodejs,我们可以快速地搭建一个简单的Web服务器,实现服务端与客户端的简单通信。服务端实现过程引入http、fs、url三个模块使用createServer方法创建一个服务服务监听3000端口号当客户端向服务端发起请求时,服... 查看详情

nodejs实现服务端与客户端简单通信(代码片段)

通过Nodejs,我们可以快速地搭建一个简单的Web服务器,实现服务端与客户端的简单通信。服务端实现过程引入http、fs、url三个模块使用createServer方法创建一个服务服务监听3000端口号当客户端向服务端发起请求时,服... 查看详情

如何使用nodejs快速搭建本地服务器

...绪以后,万事俱备,只欠东风啦!在cmd页面找到你想搭建服务器的路径,然后再当前路径下输入:anywhere8860然后浏览器就自动打开本地访问网址,一个简单的node服务器就这样被我们搭建好啦! 查看详情

搭建一个web服务下载hdfs的文件(代码片段)

...,简单的搭建一个web服务提供下载很方便快速,而且在web服务器端不留临时文件,只做stream中转,效率相当高!使用的框架是SpringMVC+HDFSAPI关键代码@Controller@RequestMapping("/file")publicclassFileDownloadControllerprivatestaticfinalStringB 查看详情

使用nodejs分别搭建一个服务器和客户端,模拟问答精灵

  嘻嘻。最近在玩nodejs,在我的学习以及理解中nodejs的执行环境主要是分为三个部分的,首先会有一个global的全局对象,然后在这个全局对象中又包含有一个核心模块和文件模块(可以理解为是用户自己写的文件)的。&nb... 查看详情