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访问ActiveX对象,以操作Access数据库为例。
Dec 15 NodeJs
nodejs下打包模块archiver详解
Dec 03 NodeJs
NodeJS学习笔记之(Url,QueryString,Path)模块
Jan 13 NodeJs
NodeJS学习笔记之MongoDB模块
Jan 13 NodeJs
nodejs修复ipa处理过的png图片
Feb 17 NodeJs
Nodejs全局安装和本地安装的不同之处
Jul 04 NodeJs
浅谈NodeJs之数据库异常处理
Oct 25 NodeJs
nodejs 最新版安装npm 的使用详解
Jan 18 NodeJs
nodejs读取本地中文json文件出现乱码解决方法
Oct 10 NodeJs
Nodejs中获取当前函数被调用的行数及文件名详解
Dec 12 NodeJs
Nodejs实现的操作MongoDB数据库功能完整示例
Feb 02 NodeJs
nodejs文件夹深层复制功能
Sep 03 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实现活动人选抽奖功能
2017/04/19 PHP
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
DHTML 中的绝对定位
2006/11/26 Javascript
javascript中的prototype属性实例分析说明
2010/08/09 Javascript
jquery可见性过滤选择器使用示例
2013/06/24 Javascript
node.js中的require使用详解
2014/12/15 Javascript
JavaScript对Cookie进行读写操作实例
2015/07/25 Javascript
jQuery UI设置固定日期选择特效代码分享
2015/08/27 Javascript
关于input全选反选恶心的异常情况
2016/07/24 Javascript
Vue指令的钩子函数使用方法
2017/03/20 Javascript
详解ES6之async+await 同步/异步方案
2017/09/19 Javascript
Node.js 进程平滑离场剖析小结
2019/01/24 Javascript
node.js使用 http-proxy 创建代理服务器操作示例
2020/02/10 Javascript
element跨分页操作选择详解
2020/06/29 Javascript
vue 重塑数组之修改数组指定index的值操作
2020/08/09 Javascript
Javascript前端下载后台传来的文件流代码实例
2020/08/18 Javascript
Linux下使用python调用top命令获得CPU利用率
2015/03/10 Python
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
2015/04/05 Python
python matplotlib坐标轴设置的方法
2017/12/05 Python
Python中psutil的介绍与用法
2019/05/02 Python
Pytorch 数据加载与数据预处理方式
2019/12/31 Python
python3实现网页版raspberry pi(树莓派)小车控制
2020/02/12 Python
Django中的模型类设计及展示示例详解
2020/05/29 Python
Pycharm自带Git实现版本管理的方法步骤
2020/09/18 Python
python 实现朴素贝叶斯算法的示例
2020/09/30 Python
python的setattr函数实例用法
2020/12/16 Python
基于HTML5 WebGL的3D机房的示例
2018/03/16 HTML / CSS
HTML5之消息通知的使用(Web Notification)
2018/10/30 HTML / CSS
PacSun官网:加州生活方式服装、鞋子和配饰
2018/03/10 全球购物
实习医生自我评价
2013/09/22 职场文书
机电一体化求职信
2014/03/10 职场文书
客房部经理岗位职责
2015/02/02 职场文书
2015年幼儿园学前班工作总结
2015/05/18 职场文书
2016八一建军节慰问信
2015/11/30 职场文书
VW、VH适配移动端的解决方案与常见问题
2023/05/21 HTML / CSS