下面的代码演示如何利用 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. Delphi:ClientDataset+TDataSetProvider的数据保存问题

    看到一篇介绍ClientDataSet和TDataSetProvider,非常精彩,特此保存. ==================================================== ...

  2. [bzoj1207][HNOI2004]打鼹鼠_动态规划

    打鼹鼠 bzoj-1207 HNOI-2004 题目大意:题目链接. 注释:略. 想法: $dp_i$表示打到了第$i$个鼹鼠时最多打了多少个鼹鼠. $O(n)$转移即可. 总时间复杂度$O(n^2) ...

  3. springboot技术

      一 我们为什么要用SpringBoot? 1. SpringBoot核心功能 SpringBoot的核心最足要的功能是自动配置,简单说下springBoot,springboot可以替代额xml配 ...

  4. CAS--CompareAndSwap原理

    1.CAS(Compare-and-Swap),即比较并替换,是一种实现并发算法时常用到的技术,Java并发包中的很多类都使用了CAS技术. CAS需要有3个操作数:内存地址V,旧的预期值A,即将要更 ...

  5. 最简单 NDK 样例

    以下在 Ubuntu下 编译一个 c 语言 hello world 并在 android 手机或模拟器上执行 进入程序位置 cd  ~/pnp5/jni 有三个文件 main.c Android.mk ...

  6. FaceBook开源库Fresco

    讨论学习使用 关于 Fresco Fresco 是一个强大的图片载入组件. Fresco 中设计有一个叫做 image pipeline 的模块.它负责从网络.从本地文件系统.本地资源载入图片. 为了 ...

  7. 【每日算法】排序算法总结(复杂度&amp;稳定性)

    一.插入排序:稳定,时间复杂度O(n^2) 想象你在打扑克牌,一開始左手是空的,接着右手開始从桌上摸牌,并将其插入到左手的一把牌中的正确位置上.为了找到这个正确位置,我们须要从右到左将它与手中的牌比較 ...

  8. 从零開始学android&lt;Bitmap图形组件.四十七.&gt;

    android.graphics.Bitmap(位图)是Android手机中专门提供的用于操作图片资源的操作类,使用此类能够直接从资源文件之中进行图片资源的读取.而且对这些图片进行一些简单的改动. 经 ...

  9. Highcharts构建加权平均值图表

    Highcharts构建加权平均值图表 加权平均值图表是将图表中多个数据列值.依据加权算法计算获取平均值,并加入生成一个加权折线.在这里,我们直接使用第三方插件Dynamic Weighted Ave ...

  10. html css 仿微信底部自己定义菜单

    近期几个月一直从事微信开发,从刚開始的懵懂渐渐成长了一点. 今天认为微信底部自己定义菜单,假设能在html的页面上也能显示就好了. 记得曾经看过某个网页有类似效果.查找了该网页的css.  ok如今h ...