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 相关文章推荐
使用forever管理nodejs应用教程
Jun 03 NodeJs
基于NodeJS的前后端分离的思考与实践(二)模版探索
Sep 26 NodeJs
windows下安装nodejs及框架express
Aug 07 NodeJs
基于Nodejs利用socket.io实现多人聊天室
Feb 22 NodeJs
详解nodejs微信公众号开发——3.封装消息响应模块
Apr 10 NodeJs
nodejs获取微信小程序带参数二维码实现代码
Apr 12 NodeJs
nodejs基于WS模块实现WebSocket聊天功能的方法
Jan 12 NodeJs
nodejs 日志模块winston的使用方法
May 02 NodeJs
typescript nodejs 依赖注入实现方法代码详解
Jul 21 NodeJs
NodeJS有难度的面试题(能答对几个)
Oct 09 NodeJs
Nodejs技巧之Exceljs表格操作用法示例
Nov 06 NodeJs
nodejs如何在package.json中设置多条启动命令
Mar 16 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新手上路(十一)
2006/10/09 PHP
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
2019/04/10 PHP
PHP如何通过带尾指针的链表实现'队列'
2020/10/22 PHP
IE7提供XMLHttpRequest对象为兼容
2007/03/08 Javascript
层序遍历在ExtJs的TreePanel中的应用
2009/10/16 Javascript
Javascript改变CSS样式(局部和全局)
2013/12/18 Javascript
常规表格多表头查询示例
2014/02/21 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
2015/02/02 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
移动开发之自适应手机屏幕宽度
2016/11/23 Javascript
jQuery实现的动态文字变化输出效果示例【附演示与demo源码下载】
2017/03/24 jQuery
Vue.js实现文章评论和回复评论功能
2020/05/30 Javascript
jQuery 实现图片的依次加载图片功能
2017/07/06 jQuery
基于JQuery的Ajax方法使用详解
2017/08/16 jQuery
JavaScript实现body内任意节点的自定义属性功能示例
2017/09/18 Javascript
iview Upload组件多个文件上传的示例代码
2018/09/30 Javascript
关于vue的npm run dev和npm run build的区别介绍
2019/01/14 Javascript
js实现unicode码字符串与utf8字节数据互转详解
2019/03/21 Javascript
vue.js实现备忘录demo
2019/06/26 Javascript
Python基于PycURL自动处理cookie的方法
2015/07/25 Python
Python引用类型和值类型的区别与使用解析
2017/10/17 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
2017/12/12 Python
python使用pdfminer解析pdf文件的方法示例
2018/12/20 Python
Django处理Ajax发送的Get请求代码详解
2019/07/29 Python
pycharm解决关闭flask后依旧可以访问服务的问题
2020/04/03 Python
Python中三维坐标空间绘制的实现
2020/09/22 Python
世界上获奖最多的手机镜头:Olloclip
2018/03/03 全球购物
Fossil加拿大官网:化石手表、手袋、首饰及配饰
2019/04/23 全球购物
JD Sports荷兰:英国领先的运动时尚零售商
2020/03/13 全球购物
企业厂长岗位职责
2013/12/17 职场文书
初三开学计划书
2014/04/27 职场文书
需求分析说明书
2014/05/09 职场文书
"9.18"国耻日演讲稿范文
2014/09/14 职场文书
三八妇女节新闻稿
2015/07/17 职场文书
品德与社会教学反思
2016/02/24 职场文书