下面的代码演示如何利用 nodeJS 搭建一个简单的Web服务器:

1. 文件 WebServer.js:

//------------------------------------------------
// 利用nodejs搭建一个简单的Web服务器
//------------------------------------------------ //启动计时器,记录启动服务所花费的时间
console.time('start WebServer need time'); //请求模块
var libHttp = require('http'); //HTTP协议模块
var libUrl = require('url'); //URL解析模块
var libFs = require("fs"); //文件系统模块
var libPath = require("path"); //路径解析模块 //依据路径获取返回内容类型字符串,用于http响应头
var funGetContentType = function (filePath) {
var contentType = ""; //使用路径解析模块获取文件扩展名
var ext = libPath.extname(filePath); switch (ext) {
case ".html":
contentType = "text/html";
break;
case ".js":
contentType = "text/javascript";
break;
case ".css":
contentType = "text/css";
break;
case ".gif":
contentType = "image/gif";
break;
case ".jpg":
contentType = "image/jpeg";
break;
case ".png":
contentType = "image/png";
break;
case ".ico":
contentType = "image/icon";
break;
default:
contentType = "application/octet-stream";
} //返回内容类型字符串
return contentType;
} //Web服务器主函数,解析请求,返回Web内容
var funWebSvr = function (req, res) {
//获取请求的url
var reqUrl = req.url; //向控制台输出请求的路径
console.log(reqUrl); //使用url解析模块获取url中的路径名
var pathName = libUrl.parse(reqUrl).pathname;
if (libPath.extname(pathName) == "") {
//如果路径没有扩展名
pathName += "/"; //指定访问目录
}
if (pathName.charAt(pathName.length - 1) == "/") {
//如果访问目录
pathName += "index.html"; //指定为默认网页
} //使用路径解析模块,组装实际文件路径
var filePath = libPath.join("./WebRoot", pathName); //判断文件是否存在
libFs.exists(filePath, function (exists) {
//文件存在
if (exists) {
//在响应头中写入内容类型
res.writeHead(200, { "Content-Type": funGetContentType(filePath) }); //创建只读流用于返回
var stream = libFs.createReadStream(filePath, { flags: "r", encoding: null }); //指定如果流读取错误,返回404错误
stream.on("error", function () {
res.writeHead(404);
res.end("<h1>404 Read Error</h1>");
}); //连接文件流和http返回流的管道,用于返回实际Web内容
stream.pipe(res);
}
else {
//文件不存在,返回404错误
res.writeHead(404, { "Content-Type": "text/html" });
res.end("<h1>404 Not Found</h1>");
}
});
} //创建一个http服务器
var webSvr = libHttp.createServer(funWebSvr); //指定服务器错误事件响应
webSvr.on("error", function (error) {
//在控制台中输出错误信息
console.log(error);
}); //开始侦听8124端口
webSvr.listen(8124, function () {
//向控制台输出服务启动的信息
console.log('WebServer running at http://127.0.0.1:8124/'); //关闭服务启动计时器
console.timeEnd('start WebServer need time');
});

2.文件 index.html:

<!DOCTYPE html>
<html>
<head>
<meta />
<title>Node.js Web Server</title>
</head>
<body>
<h1>Node.js Web Server</h1><hr>
<div id="container">
<a href="http://nodejs.cn/">
<img src="data:images/home.jpg" alt="Node" width="480" height="300" />
</a>
</div>
</body>
</html>

3.服务器文件目录:

4.运行结果:

在服务器根目录下打开 cmd 并运行 node WebServer 命令,然后在浏览器中输入 http://localhost:8124/ 即可查看。

原文地址:http://www.jb51.net/article/29865.htm

利用 nodeJS 搭建一个简单的Web服务器(转)的更多相关文章

  1. nodejs基础 用http模块 搭建一个简单的web服务器 响应纯文本

    首先说一下,我们平时在浏览器上访问网页,所看到的内容,其实是web服务器传过来的,比如我们访问www.baidu.com.当我们在浏览器地址栏输入之后,浏览器会发送请求到web服务器,然后web服务器 ...

  2. nodejs基础 用http模块 搭建一个简单的web服务器 响应JSON、html

    前端在开发中,大多会想浏览器获取json数据,下面来用nodejs中的http模块搭建一个返回json数据的服务器 var http = require("http"); var ...

  3. nodejs写一个简单的Web服务器

    目录文件如 httpFile.js如下: const httpd = require("http"); const fs = require("fs"); // ...

  4. golang搭建一个简单的web服务器

    package main import ( "io/ioutil" "log" "net/http" ) func main() { htt ...

  5. nodeJS搭建一个简单的(代理)web服务器

    前端获取数据时经常遇见跨域问题,以前一直用nginx做反向代理.最近在用vuejs,发现webpack-dev-server的代理简单好用.于是仿照写了一个简单的web服务器,用于非webpack的项 ...

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

    使用nodejs搭建一个简单的服务器 nodejs优点:性能高(读写文件) 数据操作能力强 官网:www.nodejs.org 验证是否安装成功:cmd命令行中输入node -v 如果显示版本号表示安 ...

  7. 一个简单的web服务器

    写在前面 新的一年了,新的开始,打算重新看一遍asp.net本质论这本书,再重新认识一下,查漏补缺,认认真真的过一遍. 一个简单的web服务器 首先需要引入命名空间: System.Net,关于网络编 ...

  8. 自己动手模拟开发一个简单的Web服务器

    开篇:每当我们将开发好的ASP.NET网站部署到IIS服务器中,在浏览器正常浏览页面时,可曾想过Web服务器是怎么工作的,其原理是什么?“纸上得来终觉浅,绝知此事要躬行”,于是我们自己模拟一个简单的W ...

  9. [置顶] 在Ubuntu下实现一个简单的Web服务器

    要求: 实现一个简单的Web服务器,当服务器启动时要读取配置文件的路径.如果浏览器请求的文件是可执行的则称为CGI程序,服务器并不是将这个文件发给浏览器,而是在服务器端执行这个程序,将它的标准输出发给 ...

随机推荐

  1. 在Windows下搭建RocketMQ

    原文:http://blog.csdn.net/u014134180/article/details/51790988 目录 目录 一 准备工作 1 RocketMQ部署架构1 2 环境配置 二 安装 ...

  2. 我的arcgis培训照片10

    来自:http://www.cnblogs.com/gisoracle/p/4297439.html

  3. 淘宝后台添加颜色尺码动态sku

    废话不多说,直接上代码,用了vue,可直接copy运行 <!DOCTYPE html> <html lang="en"> <head> < ...

  4. Jquery的运用

    1.首先建一个目录,在目录里面加入JQuery的插件 " jquery-1.7.2.min.js "     2.在html页面去引用这个JQuery插件,并将须要使用JS脚本的J ...

  5. cocos2d-x 3.0 CREATE_FUNC解析

    #define CREATE_FUNC(__TYPE__) \ static __TYPE__* create() \ { \ __TYPE__ *pRet = new __TYPE__(); \ i ...

  6. CSDN-markdown编辑器之从本机导入Markdown文件(二)

      CSDN-markdown编辑器支持从本机导入Markdown文件的功能,假设你有从其他站点上下载的博客文章或说明文档,或是用软件编写的博客文章或说明文档.想公布到CSDN博客中,就能够使用本功能 ...

  7. td里面嵌套img标签后如何消除图片间隔

      td里面嵌套image标签后如何消除图片间隔 CreateTime--2018年3月7日16:18:12 Author:Marydon 情景还原: <body> <div sty ...

  8. 高速清空linux下文本文件内容

    1.[root@desktop huage]# : > filename :是一个占位符.不会产生不论什么输入   2.[root@desktop huage]# > filename 相 ...

  9. 2015 Multi-University Training Contest 9-1007 Travelling Salesman Problem

    Problem Description Teacher Mai is in a maze with n rows and m columns. There is a non-negative numb ...

  10. JavaScript你所不知道的困惑(1)

    困惑一: 先看一个样例: function test(){ message = "hi"; } test(); alert(message); 会输出字符串"hi&quo ...