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 相关文章推荐
抛弃Nginx使用nodejs做反向代理服务器
Jul 17 NodeJs
Nodejs极简入门教程(一):模块机制
Oct 25 NodeJs
NodeJS Web应用监听sock文件实例
Feb 18 NodeJs
Nodejs进阶:基于express+multer的文件上传实例
Nov 21 NodeJs
Nodejs多站点切换Htpps协议详解及简单实例
Feb 23 NodeJs
Nodejs回调加超时限制两种实现方法
Jun 09 NodeJs
详解HTTPS 的原理和 NodeJS 的实现
Jul 04 NodeJs
Nodejs异步回调之异常处理实例分析
Jun 22 NodeJs
Nodejs对postgresql基本操作的封装方法
Feb 20 NodeJs
nodejs微信开发之接入指南
Mar 17 NodeJs
Nodejs监听日志文件的变化的过程解析
Aug 04 NodeJs
NodeJs实现简易WEB上传下载服务器
Aug 10 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
yii实现级联下拉菜单的方法
2014/07/31 PHP
让你的PHP7更快之Hugepage用法分析
2016/05/31 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
2020/07/24 PHP
Prototype使用指南之enumerable.js
2007/01/10 Javascript
动态控制Table的js代码
2007/03/07 Javascript
基于jQuery的Tab选项框效果代码(插件)
2011/03/01 Javascript
深入document.write()与HTML4.01的非成对标签的详解
2013/05/08 Javascript
angularjs中的单元测试实例
2014/12/06 Javascript
JS实现的页面自定义滚动条效果
2015/10/26 Javascript
JS实现的在线调色板实例(附demo源码下载)
2016/03/01 Javascript
基于javascript实现图片切换效果
2016/04/17 Javascript
JS模拟实现方法重载示例
2016/08/03 Javascript
基于javascript实现按圆形排列DIV元素(一)
2016/12/02 Javascript
完美实现js选项卡切换效果(一)
2017/03/08 Javascript
JavaScript读写二进制数据的方法详解
2018/09/09 Javascript
Vue.js的复用组件开发流程完整记录
2018/11/29 Javascript
js实现图片上传即时显示效果
2019/09/30 Javascript
[02:41]DOTA2英雄基础教程 冥魂大帝
2014/01/16 DOTA
更改Python命令行交互提示符的方法
2015/01/14 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
2018/08/31 Python
在python里面运用多继承方法详解
2019/07/01 Python
python redis连接 有序集合去重的代码
2019/08/04 Python
python 普通克里金(Kriging)法的实现
2019/12/19 Python
python实现按关键字筛选日志文件
2019/12/24 Python
IronPython连接MySQL的方法步骤
2019/12/27 Python
TensorFlow实现保存训练模型为pd文件并恢复
2020/02/06 Python
python 如何对logging日志封装
2020/12/02 Python
英国、欧洲和全球租车服务:Avis英国
2016/08/29 全球购物
aden + anais官方网站:婴儿襁褓、毯子、尿布和服装
2017/06/21 全球购物
HomeAway英国:全球领先的度假租赁在线市场
2020/02/03 全球购物
个人自我评价和职业目标
2014/01/24 职场文书
商务英语广告词大全
2014/03/18 职场文书
竞聘演讲稿怎么写
2014/08/28 职场文书
立志成才演讲稿
2014/09/04 职场文书
浅谈Golang 嵌套 interface 的赋值问题
2021/04/29 Golang
java项目构建Gradle的使用教程
2022/03/24 Java/Android