nodejs搭建本地http服务器教程


Posted in NodeJs onMarch 13, 2017

由于不做php相关的东西,懒得装apache,干脆利用nodejs搭建一个本地的服务器用于测试。

nodejs这玩意儿吧,对做前端的介入后端简直就是一把利器。而且目前,nodejs也越来越有商用价值。

nodejs其实是非常底层的,从功能上说,它既是apache也是php。像搭建http服务器这种功能,本来是apache已经封装好的,但nodejs需要我们手动来搭建。其实在实际应用中,我们可以使用现成的框架。但这里,我想手动搭建,也加深一下对http服务器的理解。

我们node执行下面这个文件,我命名为http.js,它将创建一个httpServer并监听3000端口。

var PORT = 3000;

var http = require('http');
var url=require('url');
var fs=require('fs');
var mine=require('./mine').types;
var path=require('path');

var server = http.createServer(function (request, response) {
  var pathname = url.parse(request.url).pathname;
  var realPath = path.join("assets", pathname);
  //console.log(realPath);
  var ext = path.extname(realPath);
  ext = ext ? ext.slice(1) : 'unknown';
  fs.exists(realPath, function (exists) {
    if (!exists) {
      response.writeHead(404, {
        'Content-Type': 'text/plain'
      });

      response.write("This request URL " + pathname + " was not found on this server.");
      response.end();
    } else {
      fs.readFile(realPath, "binary", function (err, file) {
        if (err) {
          response.writeHead(500, {
            'Content-Type': 'text/plain'
          });
          response.end(err);
        } else {
          var contentType = mine[ext] || "text/plain";
          response.writeHead(200, {
            'Content-Type': contentType
          });
          response.write(file, "binary");
          response.end();
        }
      });
    }
  });
});
server.listen(PORT);
console.log("Server runing at port: " + PORT + ".");

上面我们还引入了一个mine.js,这是我自己写的,里面存储的是名值对,用于定义不同后缀的文件所对应的返回方式:

exports.types = {
 "css": "text/css",
 "gif": "image/gif",
 "html": "text/html",
 "ico": "image/x-icon",
 "jpeg": "image/jpeg",
 "jpg": "image/jpeg",
 "js": "text/javascript",
 "json": "application/json",
 "pdf": "application/pdf",
 "png": "image/png",
 "svg": "image/svg+xml",
 "swf": "application/x-shockwave-flash",
 "tiff": "image/tiff",
 "txt": "text/plain",
 "wav": "audio/x-wav",
 "wma": "audio/x-ms-wma",
 "wmv": "video/x-ms-wmv",
 "xml": "text/xml"
};

fs模块是用于读取文件的,提供读取文件的方法,其实仔细研究文档会发现,它有同步和异步两种读取方式。fs.exists这个方法网上很多文章写作path.exists,,现在推荐写作fs.exists这个方法。否则会报警:

nodejs搭建本地http服务器教程

需要注意的是,不仅浏览器访问html文件会形成一次访问,里面链接的js,css等外部文件也会分别形成一次http访问。所以,http.createServer的回调其实是在一次页面访问中执行了多次的。我们console.log(realPath)一下就可以看到:

nodejs搭建本地http服务器教程

这里并没有加入默认访问index.html的功能,所以访问地址要写全http://127.0.0.1:3000/index.html

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
nodejs分页类代码分享
Jun 17 NodeJs
Nodejs实现的一个简单udp广播服务器、客户端
Sep 25 NodeJs
Nodejs极简入门教程(一):模块机制
Oct 25 NodeJs
NodeJS的Promise的用法解析
May 05 NodeJs
NodeJS远程代码执行
Aug 28 NodeJs
Nodejs中Express 常用中间件 body-parser 实现解析
May 22 NodeJs
nodejs 子进程正确的打开方式
Jul 03 NodeJs
nodejs使用http模块发送get与post请求的方法示例
Jan 08 NodeJs
nodejs微信开发之自动回复的实现
Mar 17 NodeJs
nodejs一个简单的文件服务器的创建方法
Sep 13 NodeJs
nodejs开发一个最简单的web服务器实例讲解
Jan 02 NodeJs
nodeJs的安装与npm全局环境变量的配置详解
Jan 06 NodeJs
搭建简单的nodejs http服务器详解
Mar 09 #NodeJs
nodejs读写json文件的简单方法(必看)
Mar 09 #NodeJs
Nodejs 获取时间加手机标识的32位标识实现代码
Mar 07 #NodeJs
nodejs中全局变量的实例解析
Mar 07 #NodeJs
nodejs根据ip数组在百度地图中进行定位
Mar 06 #NodeJs
详解nodeJS中读写文件方法的区别
Mar 06 #NodeJs
详谈Angular路由与Nodejs路由的区别
Mar 05 #NodeJs
You might like
PHP下对数组进行排序的函数
2010/08/08 PHP
ThinkPHP有变量的where条件分页实例
2014/11/03 PHP
php PDO实现的事务回滚示例
2017/03/23 PHP
php下载远程大文件(获取远程文件大小)的实例
2017/06/17 PHP
javascript编程起步(第五课)
2007/02/27 Javascript
JavaScript 克隆数组最简单的方法
2009/02/12 Javascript
js各种验证文本框输入格式(正则表达式)
2010/10/22 Javascript
jquery调用wcf并展示出数据的方法
2011/07/07 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
2013/05/08 Javascript
JQuery的$命名冲突详细解析
2013/12/28 Javascript
jquery实现邮箱自动补全功能示例分享
2014/02/17 Javascript
JQuery中基础过滤选择器用法实例分析
2015/05/18 Javascript
详解AngularJS的通信机制
2015/06/18 Javascript
js实现Select列表各项上移和下移的方法
2015/08/14 Javascript
JavaScript中的数据类型转换方法小结
2015/10/26 Javascript
JS中数组与对象的遍历方法实例小结
2018/08/14 Javascript
深入浅析javascript函数中with
2018/10/28 Javascript
基于Vue插入视频的2种方法小结
2019/04/02 Javascript
JS获取表格视图所选行号的ids过程解析
2020/02/21 Javascript
Layer UI表格列日期格式化及取消自动填充日期的实现方法
2020/05/10 Javascript
python+matplotlib演示电偶极子实例代码
2018/01/12 Python
浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器
2019/03/11 Python
Python音频操作工具PyAudio上手教程详解
2019/06/26 Python
Python实现i人事自动打卡的示例代码
2020/01/09 Python
python批量替换文件名中的共同字符实例
2020/03/05 Python
pycharm设置默认的UTF-8编码模式的方法详解
2020/06/01 Python
浅谈matplotlib中FigureCanvasXAgg的用法
2020/06/16 Python
Python基础教程之输入输出和运算符
2020/07/26 Python
简述python Scrapy框架
2020/08/17 Python
JAVA程序员面试题
2012/10/03 面试题
国际金融专业大学生职业生涯规划书
2013/12/28 职场文书
心得体会的写法
2014/09/05 职场文书
2014年小学安全工作总结
2014/12/04 职场文书
2015年学生会干事工作总结
2015/04/09 职场文书
用Python提取PDF表格的方法
2021/04/11 Python
SQL Server中的逻辑函数介绍
2022/05/25 SQL Server