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教程之制作一个简单的文章发布系统
Nov 21 NodeJs
nodejs实现获取当前url地址及url各种参数值
Jun 25 NodeJs
nodejs初步体验篇
Nov 23 NodeJs
搭建简单的nodejs http服务器详解
Mar 09 NodeJs
nodejs开发微信小程序实现密码加密
Jul 11 NodeJs
nodejs socket服务端和客户端简单通信功能
Sep 14 NodeJs
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
Jan 05 NodeJs
Nodejs模块载入运行原理
Feb 23 NodeJs
nodejs检测因特网是否断开的解决方案
Apr 17 NodeJs
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
Nov 18 NodeJs
NodeJS配置CORS实现过程详解
Dec 02 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
PHP4.04简明安装
2006/10/09 PHP
codeigniter中view通过循环显示数组数据的方法
2015/03/20 PHP
php实现生成验证码实例分享
2016/04/10 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
2017/05/11 PHP
JavaScript获取页面上某个元素的代码
2011/03/13 Javascript
利用javascript解决图片缩放及其优化的代码
2012/05/23 Javascript
JavaScript实现带缓冲效果的随屏滚动漂浮广告代码
2015/11/06 Javascript
JS实现根据文件字节数返回文件大小的方法
2016/08/02 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
2016/10/31 Javascript
jQuery中的siblings()是什么意思(推荐)
2016/12/29 Javascript
javaScript实现复选框全选反选事件详解
2020/11/20 Javascript
JS实现快递单打印功能【推荐】
2018/06/21 Javascript
JavaScript多态与封装实例分析
2018/07/27 Javascript
使用axios请求时,发送formData请求的示例
2019/10/29 Javascript
vue 路由缓存 路由嵌套 路由守卫 监听物理返回操作
2020/08/06 Javascript
多种类型jQuery网页验证码插件代码实例
2021/01/09 jQuery
[01:04:20]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.29
2020/12/02 DOTA
[48:31]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第二场 12.17
2020/12/19 DOTA
python的几种矩阵相乘的公式详解
2019/07/10 Python
python 内置函数汇总详解
2019/09/16 Python
django使用F方法更新一个对象多个对象字段的实现
2020/03/28 Python
浅谈Python3中print函数的换行
2020/08/05 Python
Python学习工具jupyter notebook安装及用法解析
2020/10/23 Python
python实现代码审查自动回复消息
2021/02/01 Python
python 如何读、写、解析CSV文件
2021/03/03 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
HTML5 video播放器全屏(fullScreen)方法实例
2015/04/24 HTML / CSS
儿科护士自我鉴定
2013/10/14 职场文书
优秀大学生的自我评价
2014/01/16 职场文书
餐厅销售主管职责范本
2014/02/19 职场文书
表决心的诗句大全
2014/03/11 职场文书
住房抵押登记委托书
2014/09/27 职场文书
保险公司岗前培训工作总结
2015/10/24 职场文书
MongoDB日志切割的三种方式总结
2021/09/15 MongoDB
Mysql 一主多从的部署
2022/05/20 MySQL
SpringBoot使用ip2region获取地理位置信息的方法
2022/06/21 Java/Android