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


Posted in Javascript onFebruary 20, 2017

前言

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

早先不使用web服务器的情况下想要在浏览器端访问本地资源,可以利用firefox浏览器,其可以自己启动一个小型web服务器。
为了让刚接触node的人也能大体看懂,本文的代码我将尽量简化。

准备

首先,需要安装nodejs,这个可以去官网下载,目前我本地安装的v0.12版本。

安装完成后可以通过命令行测试安装是否成功,输入:node -v,应该会显示当前安装node版本号。
本文中用到的模块,都是nodejs核心模块,不需要从外部下载,如果有需要,可以使用以下命令安装:npm install xxx

开始

下一步,新建js文件,可以命名为server.js,代码如下:

var http = require('http');
 var url = require('url');
 var path = require('path');
 var fs = require('fs');

 var dir, arg = process.argv[2] || ''; // 命令行第三个参数,用来接收目录,可为空,相对当前server.js文件的目录名称
 // 比如使用命令 node server debug,意思就是debug文件夹与server.js文件同级
 // 且你想以debug文件夹启动web服务

 http.createServer(function (req, res) {
 var pathname = __dirname + url.parse(req.url).pathname;
 dir = dir ? dir : pathname; // 记住dir(目录)
 pathname = dir ? pathname.replace(dir, dir + arg + '/') : pathname; // 替换文件静态路径
 if (path.extname(pathname) == "") {
 pathname += "/";
 }
 if (pathname.charAt(pathname.length - 1) == "/") {
 pathname += "index.html"; // 入口文件,此处默认index.html
 }

 fs.exists(pathname, function (exists) {
 if (exists) {
 switch (path.extname(pathname)) {
 case ".html":
 res.writeHead(200, {"Content-Type": "text/html"});
 break;
 case ".js":
 res.writeHead(200, {"Content-Type": "text/javascript"});
 break;
 case ".css":
 res.writeHead(200, {"Content-Type": "text/css"});
 break;
 case ".gif":
 res.writeHead(200, {"Content-Type": "image/gif"});
 break;
 case ".jpg":
 res.writeHead(200, {"Content-Type": "image/jpeg"});
 break;
 case ".png":
 res.writeHead(200, {"Content-Type": "image/png"});
 break;
 default:
 res.writeHead(200, {"Content-Type": "application/octet-stream"});
 }

 // res可以自己添加信息来简单交互 比如可以修改点header信息 或者修改返回的资源数据
 fs.readFile(pathname, function (err, data) {
 res.end(data);
 });
 }
 else {
 res.writeHead(404, {"Content-Type": "text/html"});
 res.end("<h1>404 Not Found</h1>");
 }
 });
 }).listen(8085, "127.0.0.5"); // 服务器端口

 console.log("server running at http://127.0.0.5:8085/");

启动

当node安装完成及上述server.js文件也新建好之后。将其与你要访问的文件夹放在一起,可以放同层或者直接下层。比如,如果你要访问d:\test\debug文件夹。

你可以先将当前文件放入同层或者直接下,然后输入如下命令启动web服务:

  1. 先打开`cmd`,进入server文件所在目录,比如是`test`目录;
  2. 然后输入:`node server debug`(同层), 或者`node server`(子层),
  3. 此时会提示`server running at http://127.0.0.5:8085/`, 表示启动服务成功;
  4. 最后打开浏览器,进入:`127.0.0.5:8085`,即可访问此资源。

最后

简单解释下上面的代码。

首先最上面的require表示需要用到那几个模块,先引用一下;

arg表示输入的命令行的第三个参数,上面是做了手动截取;

createServer方法表示创建一个http服务,以函数为参数,本文代码中传入了一个匿名函数;

  1. req,表示http request(请求)对象,其携带着来自客户端此次http请求的相关信息,例如请求method、请求query参数、请求header头信息等;
  2. res,表示http response(返回)对象,用来给客户端返回请求资源用,可以手动添加信息,例如返回的数据、返回的头信息等、返回的code等;
  3. fs,表示文件资源对象,具体可以访问nodejs官网的api;
  4. path,表示资源路径对象,具体可以访问nodejs官网的api。

listen表示创建的服务监听,一旦访问了此端口,将进入此前的匿名函数回调中,将资源返回给客户端。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
解析JSON对象与字符串之间的相互转换
Dec 18 Javascript
JS中如何判断传过来的JSON数据中是否存在某字段
Aug 18 Javascript
js查找节点的方法小结
Jan 13 Javascript
基于jQuery实现返回顶部实例代码
Jan 01 Javascript
javascript html5 canvas实现可拖动省份的中国地图
Mar 11 Javascript
jQuery实现可拖拽的许愿墙效果【附demo源码下载】
Sep 14 Javascript
JavaScript高仿支付宝倒计时页面及代码实现
Oct 21 Javascript
vue实现简单实时汇率计算功能
Jan 15 Javascript
jQuery实现扑克正反面翻牌效果
Mar 10 Javascript
移动端使用localResizeIMG4压缩图片
Apr 22 Javascript
node.js之基础加密算法模块crypto详解
Sep 11 Javascript
JS+CSS3实现的简易钟表效果示例
Apr 13 Javascript
jQuery实现鼠标跟随效果
Feb 20 #Javascript
BootStrap fileinput.js文件上传组件实例代码
Feb 20 #Javascript
Bootstrap jquery.twbsPagination.js动态页码分页实例代码
Feb 20 #Javascript
分享一道关于闭包、bind和this的面试题
Feb 20 #Javascript
原生JS实现跑马灯效果
Feb 20 #Javascript
js 实现省市区三级联动菜单效果
Feb 20 #Javascript
js事件冒泡与事件捕获详解
Feb 20 #Javascript
You might like
php中iconv函数使用方法
2008/05/24 PHP
php curl选项列表(超详细)
2013/07/01 PHP
PHP 读取和编写 XML
2014/11/19 PHP
PHP之浮点数计算比较以及取整数不准确的解决办法
2015/07/29 PHP
详解PHP的Yii框架中自带的前端资源包的使用
2016/03/31 PHP
javascript 控制弹出窗口
2007/04/10 Javascript
javascript smipleChart 简单图标类
2011/01/12 Javascript
jQuery获取注册信息并提示实现代码
2013/04/21 Javascript
jquery阻止后续事件只执行第一个事件
2014/07/24 Javascript
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
2015/09/19 Javascript
JavaScript中的Object对象学习教程
2016/05/20 Javascript
jQuery用FormData实现文件上传的方法
2016/11/21 Javascript
JavaScript之map reduce_动力节点Java学院整理
2017/06/29 Javascript
详解webpack介绍&amp;安装&amp;常用命令
2017/06/29 Javascript
浅谈 vue 中的 watcher
2017/12/04 Javascript
微信小程序返回上一页传参并刷新过程解析
2019/12/13 Javascript
[54:15]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第二场2月1日
2021/03/11 DOTA
python创建临时文件夹的方法
2015/07/06 Python
Django1.7+python 2.78+pycharm配置mysql数据库
2016/10/09 Python
Python使用time模块实现指定时间触发器示例
2017/05/18 Python
全面了解Nginx, WSGI, Flask之间的关系
2018/01/09 Python
Python元组拆包和具名元组解析实例详解
2018/03/26 Python
Python生成rsa密钥对操作示例
2019/04/26 Python
使用python爬取抖音视频列表信息
2019/07/15 Python
PyCharm刷新项目(文件)目录的实现
2020/02/14 Python
使用Python打造一款间谍程序的流程分析
2020/02/21 Python
Pycharm连接远程服务器过程图解
2020/04/30 Python
北京RT科技有限公司.net工程师面试题
2013/02/15 面试题
abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
2012/10/15 面试题
C#可否对内存进行直接的操作
2015/02/26 面试题
前台文员个人求职信范文
2014/01/05 职场文书
银行介绍信范文
2014/01/10 职场文书
导游词之山西-五老峰
2019/10/07 职场文书
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python
MySQL如何解决幻读问题
2021/08/07 MySQL