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异步编程
Dec 04 NodeJs
Nodejs下DNS缓存问题浅析
Nov 16 NodeJs
Nodejs高扩展性的模板引擎 functmpl简介
Feb 13 NodeJs
nodejs个人博客开发第二步 入口文件
Apr 12 NodeJs
nodejs模块学习之connect解析
Jul 05 NodeJs
用nodejs实现json和jsonp服务的方法
Aug 25 NodeJs
浅谈NodeJs之数据库异常处理
Oct 25 NodeJs
nodejs实现超简单生成二维码的方法
Mar 17 NodeJs
nodejs取得当前执行路径的方法
May 13 NodeJs
详解Nodejs mongoose
Jun 10 NodeJs
nodejs微信开发之自动回复的实现
Mar 17 NodeJs
Nodejs在局域网配置https访问的实现方法
Oct 17 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
jquery Firefox3.5中操作select的问题
2009/07/10 Javascript
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
2009/12/07 Javascript
JavaScript和ActionScript的交互实现代码
2010/08/01 Javascript
jQuery EasyUI API 中文文档 - Tabs标签页/选项卡
2011/10/01 Javascript
创建公共调用 jQuery Ajax 带返回值
2012/08/01 Javascript
你必须知道的Javascript知识点之"深入理解作用域链"的介绍
2013/04/23 Javascript
JS 精确统计网站访问量的实例代码
2013/07/05 Javascript
jquery 检测元素是否存在的实例代码
2013/11/19 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
使用AngularJS对路由进行安全性处理的方法
2015/06/18 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
2016/01/04 Javascript
JS实现css hover操作的方法示例
2017/04/07 Javascript
javascript 缓冲运动框架的实现
2017/09/29 Javascript
JavaScript基于面向对象实现的猜拳游戏
2018/01/03 Javascript
vue实现动态添加数据滚动条自动滚动到底部的示例代码
2018/07/06 Javascript
基于VUE实现的九宫格抽奖功能
2018/09/30 Javascript
关于ligerui子页面关闭后,父页面刷新,重新加载的方法
2019/09/27 Javascript
[42:32]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第二场 10.28
2020/10/28 DOTA
[04:40]DOTA2-DPC中国联赛1月26日Recap集锦
2021/03/11 DOTA
python的常见命令注入威胁
2013/02/18 Python
python中matplotlib的颜色及线条控制的示例
2018/03/16 Python
python中dict使用方法详解
2019/07/17 Python
python中property和setter装饰器用法
2019/12/19 Python
python读取与处理netcdf数据方式
2020/02/14 Python
解决Tensorboard 不显示计算图graph的问题
2020/02/15 Python
python爬虫使用正则爬取网站的实现
2020/08/03 Python
python在CMD界面读取excel所有数据的示例
2020/09/28 Python
AmazeUI导航的示例代码
2020/08/14 HTML / CSS
国际象棋商店:The Chess Store
2018/07/09 全球购物
Ticketmaster意大利:音乐会、节日、艺术和剧院的官方门票
2019/12/23 全球购物
C#如何调用Windows程序打开一个文档
2014/12/26 面试题
工作失职检讨书范文
2014/01/16 职场文书
上海世博会志愿者口号
2014/06/17 职场文书
暑期培训心得体会
2014/09/02 职场文书
大卫科波菲尔读书笔记
2015/06/30 职场文书
Python一行代码实现自动发邮件功能
2021/05/30 Python