利用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 相关文章推荐
javascript显示隐藏层比较不错的方法分析
Sep 30 Javascript
JS+ACTIVEX实现网页选择本地目录路径对话框
Mar 18 Javascript
jQuery之折叠面板的深入解析
Jun 19 Javascript
jquery如何实现锚点链接之间的平滑滚动
Dec 02 Javascript
JavaScript中实现最高效的数组乱序方法
Oct 11 Javascript
JavaScript实现继承的4种方法总结
Oct 16 Javascript
Javascript中3个需要注意的运算符
Apr 02 Javascript
JavaScript动态添加css样式和script标签
Jul 19 Javascript
浅述节点的创建及常见功能的实现
Dec 15 Javascript
JS对象深度克隆实例分析
Mar 16 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
Nov 06 Javascript
Ant Design的可编辑Tree的实现操作
Oct 31 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
人大复印资料处理程序_补充篇
2006/10/09 PHP
PHP跨平台获取服务器IP地址自定义函数分享
2014/12/29 PHP
PHP将session信息存储到数据库的类实例
2015/03/04 PHP
JavaScript Accessor实现说明
2010/12/06 Javascript
JavaScript 基础篇之运算符、语句(二)
2012/04/07 Javascript
JavaScript常用脚本汇总(二)
2015/03/04 Javascript
CSS javascript 结合实现悬浮固定菜单效果
2015/08/23 Javascript
jquery实现仿Flash的横向滑动菜单效果代码
2015/09/17 Javascript
uploadify多文件上传参数设置技巧
2015/11/16 Javascript
原生js实现选项卡功能
2017/03/08 Javascript
基于vue的fullpage.js单页滚动插件
2017/03/20 Javascript
canvas简单快速的实现知乎登录页背景效果
2017/05/08 Javascript
js实现文字列表无缝滚动效果
2017/06/23 Javascript
angular2中使用第三方js库的实例
2018/02/26 Javascript
Node.js npm命令运行node.js脚本的方法
2018/10/10 Javascript
vue实现移动端项目多行文本溢出省略
2020/07/29 Javascript
[44:15]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第二局
2016/03/06 DOTA
使用Python实现一个简单的项目监控
2015/03/31 Python
Python操作使用MySQL数据库的实例代码
2017/05/25 Python
python编程羊车门问题代码示例
2017/10/25 Python
Python3操作Excel文件(读写)的简单实例
2019/09/02 Python
pycharm运行程序时看不到任何结果显示的解决
2020/02/21 Python
python实现翻译word表格小程序
2020/02/27 Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
2021/01/01 Python
Rowdy Gentleman服装和配饰:美好时光
2019/09/24 全球购物
自1926年以来就为冰岛保持温暖:66°North
2020/11/27 全球购物
市场安全管理制度
2014/01/26 职场文书
社区党务公开实施方案
2014/03/18 职场文书
公证委托书大全
2014/04/04 职场文书
物流管理专业求职信
2014/05/29 职场文书
新文化运动的基本口号
2014/06/21 职场文书
营销经理工作检讨书
2014/11/03 职场文书
因身体原因离职的辞职信范文
2015/05/12 职场文书
2015年教师个人业务工作总结
2015/10/23 职场文书
SQL实战演练之网上商城数据库商品类别数据操作
2021/10/24 MySQL
Spring Data JPA框架自定义Repository接口
2022/04/28 Java/Android