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教程之异步I/O
Nov 21 NodeJs
nodejs创建web服务器之hello world程序
Aug 20 NodeJs
nodeJs链接Mysql做增删改查的简单操作
Feb 04 NodeJs
Nodejs基于LRU算法实现的缓存处理操作示例
Mar 17 NodeJs
详解nodejs微信公众号开发——1.接入微信公众号
Apr 10 NodeJs
NodeJs中express框架的send()方法简介
Jun 20 NodeJs
Windows下使用Nodejs运行js的方法
Sep 02 NodeJs
NodeJS搭建HTTP服务器的实现步骤
Oct 12 NodeJs
nodejs同步调用获取mysql数据时遇到的大坑
Mar 02 NodeJs
NodeJs操作MongoDB教程之分页功能以及常见问题
Apr 09 NodeJs
nodejs读取图片返回给浏览器显示
Jul 25 NodeJs
NodeJS和浏览器中this关键字的不同之处
Mar 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
全国FM电台频率大全 - 10 江苏省
2020/03/11 无线电
PHP实现采集中国天气网未来7天天气
2014/10/15 PHP
jQuery实用基础超详细介绍
2013/04/11 Javascript
js点击更换背景颜色或图片的实例代码
2013/06/25 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
2013/12/29 Javascript
JS判断、校验MAC地址的2个实例
2014/05/05 Javascript
javascript跨域原因以及解决方案分享
2015/04/08 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
2016/02/18 Javascript
javascript实现可键盘控制的抽奖系统
2016/03/10 Javascript
jQueryUI中的datepicker使用方法详解
2016/05/25 Javascript
js严格模式总结(分享)
2016/08/22 Javascript
AngularJs bootstrap搭载前台框架——准备工作
2016/09/01 Javascript
layui前段框架日期控件使用方法详解
2017/05/19 Javascript
js 原生判断内容区域是否滚动到底部的实例代码
2017/11/15 Javascript
Node.js 如何利用异步提升任务处理速度
2019/01/07 Javascript
Vue Components 数字键盘的实现
2019/09/18 Javascript
jQuery实现手风琴特效
2021/01/11 jQuery
Python从MP3文件获取id3的方法
2015/06/15 Python
利用numpy+matplotlib绘图的基本操作教程
2017/05/03 Python
利用Python循环(包括while&for)各种打印九九乘法表的实例
2017/11/06 Python
利用Python将数值型特征进行离散化操作的方法
2018/11/06 Python
python爬虫学习笔记之pyquery模块基本用法详解
2020/04/09 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
2020/04/24 Python
在pycharm中创建django项目的示例代码
2020/05/28 Python
python如何变换环境
2020/07/21 Python
英国建筑用品在线:Building Supplies Online(BSO)
2018/04/30 全球购物
简述数组与指针的区别
2014/01/02 面试题
温馨提示标语
2014/06/26 职场文书
缅怀先烈演讲稿
2014/09/03 职场文书
小学教师2014年度工作总结
2014/12/03 职场文书
网络营销计划
2015/01/17 职场文书
2016年中学法制宣传日活动总结
2016/04/01 职场文书
廉政党课工作报告案例
2019/06/21 职场文书
实用干货:敬酒词大全,帮你应付各种场合
2019/11/21 职场文书
MySQL Innodb关键特性之插入缓冲(insert buffer)
2021/04/08 MySQL
Python多个MP4合成视频的实现方法
2021/07/16 Python