使用Node.js搭建Web服务器

1、 Node.js 创建的第一个应用

1、引入http模块

var http = require("http");

2、 创建服务器

接下来我们使用 http.createServer() 方法创建服务器,并使用 listen 方法绑定 8888 端口。函数通过 request, response 参数来接收和响应数据。

//1.引入 http 模块
var http=require('http');
//2.用 http 模块创建服务
http.createServer(function(req,res){
// 发送 HTTP 头部
// HTTP 状态值: 200 : OK
//设置 HTTP 头部,状态码是 200,文件类型是 html,字符集是 utf-8
res.writeHead(200,{"Content-Type":"text/html;charset='utf-8'"});
res.write('你好 nodejs');
res.write('我是第一个 nodejs 程序');
res.end(); /*结束响应*/
}).listen(8001);

2、 WEB 服务器介绍

Web 服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等 Web 客户端提供文档, 也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。目前最主流的三个 Web 服务器是 Apache 、 Nginx 、IIS。

3、 Nodejs 封装一个 WEB 服务器

启动

node start

功能

* 能显示以 `.html/.htm` 结尾的 Web 页面

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

* 显示图片资源

* 自动下载以 `.apk/.docx/.zip` 结尾的文件

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

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

HttpServer.js

module.exports = (function () {

  "use strict";

  console.time('[HttpServer][Start]');

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

  return {
    //启动服务
    start: function () {
      var port = this.config.port;
      var ip = this.config.ip;

      //创建一个服务
      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]");
      });

      httpServer.on("error", function (error) {
        console.error(error);
      });
    },

    /**
     * 请求处理
     * @param request
     * @param response
     */
    processRequest: function (request, response) {
      var hasExt = true;
      var requestUrl = request.url;
      var pathName = url.parse(requestUrl).pathname;

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

      //如果路径中没有扩展名
      if ((pathName) === '') {
        //如果不是以/结尾的,加/并作301重定向
        if (pathName.charAt(pathName.length - 1) != "/") {
          pathName += "/";
          var redirect = "http://" + request.headers.host + pathName;
          response.writeHead(301, {
            location: redirect
          });
          response.end();
          return; //fix bug: 执行301重定向后应终止后续流程,以防 "write after 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);
          }
        }
      });
    },

    /**
     * 获取文档的内容类型
     * @param filePath
     * @returns {*}
     */
    getContentType: function (filePath) {
      var contentType = this.config.mime;
      var ext = path.extname(filePath).substr(1);
      if (contentType.hasOwnProperty(ext)) {
        return contentType[ext];
      } else {
        return contentType.default;
      }
    },

    ///配置信息
    config: {
      port: 8888,
      ip: '127.0.0.1',
      mime: {
        html: "text/html",
        js: "text/javascript",
        css: "text/css",
        gif: "image/gif",
        jpg: "image/jpeg",
        png: "image/png",
        ico: "image/icon",
        txt: "text/plain",
        json: "application/json",
        default: "application/octet-stream"
      }
    }
  }
})();

start.js

var http = require('./http/HttpServer');
http.start();

源代码

点击下载

到此这篇关于使用Node.js搭建Web服务器的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Node.js原生api搭建web服务器的方法步骤

    node.js 实现一个简单的 web 服务器还是比较简单的,以前利用 express 框架实现过『nodeJS搭一个简单的(代理)web服务器』.代码量很少,可是使用时需要安装依赖,多处使用难免有点不方便.于是便有了完全使用原生 api 来重写的想法,也当作一次 node.js 复习. 1.静态 web 服务器 'use strict' const http = require('http') const url = require('url') const fs = require('fs'

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

    使用 Node 创建 Web 服务器 什么是 Web 服务器? Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,Web服务器的基本功能就是提供Web信息浏览服务.它只需支持HTTP协议.HTML文档格式及URL,与客户端的网络浏览器配合. 大多数 web 服务器都支持服务端的脚本语言(php.python.ruby)等,并通过脚本语言从数据库获取数据,将结果返回给客户端浏览器. 目前最主流的三个Web服务器是Apache.Nginx.IIS. Node.js 提供了 htt

  • node学习记录之搭建web服务器教程

    web服务器的基本知识 功能:1.接收HTTP请求(get,post,delete,put)2.处理HTTP请求 常见的web服务器架构: 1. Nginx/Apache:负责接收http请求,确定谁来处理请求,并返回请求的结果 2. php-fpm/php模块 常见得到请求 1.请求文件:包括要处理的静态文件 2.完成特定的操作,如登录,获取特定数据等等 使用http创建web服务器 //引入nodejs的核心模块http var http = require('http') ; //创建一个

  • Node.js搭建WEB服务器的示例代码

    前言 这几天为了熟悉vue.js框架,还有webpack的使用,就准备搭建一个发布和浏览markdwon的简单WEB应用.原本是想着用bash脚本和busybox的httpd来作为后台服务,但是bash脚本解析和生成JSON非常不方便,而用Java语言写又觉得部署不方便,所以就想到了正在用到的Node.js,于是就有了这篇博文.(文末有本文代码的github地址) 简单例子 首先,从搭建最简单的 Hello world 开始,建立以下目录.文件和内容. 建立项目及运行 project web-s

  • Nodejs如何搭建Web服务器

    使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块.文件系统.url解析模块.路径解析模块.以及301重定向问题,下面我们就简单讲一下如何来搭建一个简单的Web服务器. 作为一个Web服务器应具备以下几个功能: 1.能显示以.html/.htm结尾的Web页面 2.能直接打开以.js/.css/.json/.text结尾的文件内容 3.显示图片资源 4.自动下载以.apk/.

  • Nodejs 搭建简单的Web服务器详解及实例

    使用 Nodejs 搭建简单的Web服务器 使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块.文件系统.url解析模块.路径解析模块.以及301重定向问题,下面我们就简单讲一下如何来搭建一个简单的Web服务器. 作为一个Web服务器应具备以下几个功能: 1.能显示以.html/.htm结尾的Web页面 2.能直接打开以.js/.css/.json/.text结尾的文件内容

  • 利用node.js搭建简单web服务器的方法教程

    前言 使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块.文件系统.url解析模块.路径解析模块.以及301重定向问题,下面我们就简单讲一下如何来搭建一个简单的Web服务器. 早先不使用web服务器的情况下想要在浏览器端访问本地资源,可以利用firefox浏览器,其可以自己启动一个小型web服务器. 为了让刚接触node的人也能大体看懂,本文的代码我将尽量简化. 准备 首先,

  • 用nodejs搭建websocket服务器

    简单开始 1.安装node.https://nodejs.org/en/ 2.安装ws模块 ws:是nodejs的一个WebSocket库,可以用来创建服务. https://github.com/websockets/ws 3.server.js 在项目里面新建一个server.js,创建服务,指定8181端口,将收到的消息log出来. var WebSocketServer = require('ws').Server, wss = new WebSocketServer({ port: 8

  • 使用Node.js搭建Web服务器

    1. Node.js 创建的第一个应用 1.引入http模块 var http = require("http"); 2. 创建服务器 接下来我们使用 http.createServer() 方法创建服务器,并使用 listen 方法绑定 8888 端口.函数通过 request, response 参数来接收和响应数据. //1.引入 http 模块 var http=require('http'); //2.用 http 模块创建服务 http.createServer(funct

  • 零基础之Node.js搭建API服务器的详解

    零基础之Node.js搭建API服务器 这篇文章写给那些Node.js零基础,但希望自己动手实现服务器API的前端开发者,尝试帮大家打开一扇门. HTTP服务器实现原理 HTTP服务器之所以能提供前端使用的API,其实现原理是服务器保持监听计算机的某个端口(通常是80),等待客户端请求,当请求到达并经过一系列处理后,服务器发送响应数据给到前端. 平时大家通过Ajax调用API,即是发起一次请求,经过服务器处理后,得到结果,然后再进行前端处理.如今使用高级编程语言,要实现服务器那部分功能已经变得非

  • Node.js 搭建后端服务器内置模块( http+url+querystring 的使用)

    目录 前言 一.创建服务器 二.返回响应数据 返回复杂对象数据 返回html文档数据 三.设置响应头和状态码 四.实现路由接口 创建简易路由应用 五.处理URL URL格式转换 URL路径拼接 正确转换文件路径 转换为Options Url对象 六.跨域处理 后端设置跨域 jsonp接口 七.Node作为中间层使用 模拟get请求(转发跨域数据) 模拟post请求(服务器提交) 八.使用Node实现爬虫 前言 这一节我们去学习NodeJs的内置模块:http.url.querystring ,并

  • node+js搭建时间服务器的思路详解

    目录 时间服务器 1.思路准备 1.1思路来源 1.2思路前提要求 1.3技术要求 2.实现 2.1实现准备 2.2搭建前台页面 2.3搭建后台服务器 2.3.1搭建后台 2.3.2后台处理要发送的数据 2.4前端处理获取的数据 2.4.1时间数据 2.4.2天气信息 2.5效果展示 3.总结 时间服务器 时间服务器 1.思路准备 1.1思路来源 这是在我的软件老师给的期末课程设计他要的是通过自己的知识储备,来设计一个前后端数据的展示与发送 1.2思路前提要求 1.搭建一个前台页面,要求简单易懂

  • Node.js创建Web、TCP服务器

    使用http模块创建Web服务器 Web服务器的功能: 接受HTTP请求(GET.POST.DELETE.PUT.PATCH) 处理HTTP请求(自己处理,或请求别的程序处理) 做出响应(返回页面.文件.各类数据等) 常见的Web服务器架构: Nginx.Apache:负责接受HTTP请求,确定谁来处理请求,并返回请求的结果 php-fpm / php模块:处理分配给自己的请求,并将处理结果返回给分配者 常见请求种类: 请求文件:包括静态文件(网页.图片.前端JavaScript文件.css文件

  • 使用node.js搭建服务器

    使用node搭建小型服务器(其实就是分析url然后输出文件给客户端) 最近需要完成一个课程设计,被项目经理(组长)分配写界面,但是总觉得只写前端的话缺了点什么,所以想自己写下后端玩一下. 期间还稍微纠结了一下用什么语言,本来打算正好学习一下PHP,可后来转念一想,用nodejs岂不美哉,不仅了解了后台开发,也相当于巩固了js基础,一举两得,美滋滋. 在学习node的过程中,学到了使用node实现一个服务器这一块,感觉是对前面所学模块的一个很好的总结.用到了四个基本的模块fs stream htt

  • 十大 Node.js 的 Web 框架(快速提升工作效率)

    Node.js 系统含有多种不同的结构,如 MVC.全栈.REST API 和生成器等.这些结构不仅提升了 Web 应用的开发效率,也优化了开发过程.在这里,我们收集整理了十个高效的 Node.js 框架,希望对你有帮助. 1.Node.js 开发框架 Sail.js Sails.js 就像是 Node.js 平台上的 Rails 框架.这是一个可靠可伸缩的开发框架,面向服务的架构,提供数据驱动的 API 集合.用来开发多玩家游戏.聊天应用和实时面板引用非常方便,也可用于开发企业级 Node.j

随机推荐