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学习笔记之Http模块
Jan 13 NodeJs
Windows 系统下设置Nodejs NPM全局路径
Apr 26 NodeJs
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
Dec 30 NodeJs
NodeJS链接MySql数据库的操作方法
Jun 27 NodeJs
NodeJS爬虫实例之糗事百科
Dec 14 NodeJs
nodejs结合Socket.IO实现的即时通讯功能详解
Jan 12 NodeJs
nodejs中密码加密处理操作详解
Mar 20 NodeJs
Nodejs中的JWT和Session的使用
Aug 21 NodeJs
详解webpack打包nodejs项目(前端代码)
Sep 19 NodeJs
nodejs 使用nodejs-websocket模块实现点对点实时通讯
Nov 28 NodeJs
nodejs实现用户登录路由功能
May 22 NodeJs
nodejs实现的http、https 请求封装操作示例
Feb 06 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
PHP 各种排序算法实现代码
2009/08/20 PHP
PHPThumb PHP 图片缩略图库
2012/03/11 PHP
解析zend studio中直接导入svn中的项目的方法步骤
2013/06/21 PHP
php中base64_decode与base64_encode加密解密函数实例
2014/11/24 PHP
Laravel路由设定和子路由设定实例分析
2016/03/30 PHP
PHP入门教程之表单与验证实例详解
2016/09/11 PHP
用 Javascript 验证表单(form)中的单选(radio)值
2009/09/08 Javascript
js字符编码函数区别分析
2011/12/28 Javascript
js简单实现HTML标签Select联动带跳转
2013/10/23 Javascript
浅谈JavaScript异常处理语句
2015/06/26 Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
2015/10/10 Javascript
基于PHP和Mysql相结合使用jqGrid读取数据并显示
2015/12/02 Javascript
AngularJS出现$http异步后台无法获取请求参数问题的解决方法
2016/11/03 Javascript
关于vue-router的beforeEach无限循环的问题解决
2017/09/09 Javascript
解决jquery appaend元素中id绑定事件失效的问题
2017/09/12 jQuery
JavaScript异步加载问题总结
2018/02/17 Javascript
JS实现的简单下拉框联动功能示例
2018/05/11 Javascript
Vue2 监听属性改变watch的实例代码
2018/08/27 Javascript
Layui 导航默认展开和菜单栏选中高亮设置的方法
2019/09/04 Javascript
通过layer实现可输入的模态框的例子
2019/09/27 Javascript
在Python的web框架中中编写日志列表的教程
2015/04/30 Python
python获得文件创建时间和修改时间的方法
2015/06/30 Python
Python3远程监控程序的实现方法
2019/07/15 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
2020/04/22 Python
python super()函数的基本使用
2020/09/10 Python
python各种excel写入方式的速度对比
2020/11/10 Python
协议书怎么写
2014/04/21 职场文书
应届硕士毕业生自荐信
2014/05/26 职场文书
商业企业管理专业求职信
2014/07/10 职场文书
园林技术专业求职信
2014/07/28 职场文书
2014班子成员自我剖析材料思想汇报
2014/10/01 职场文书
公安机关查摆剖析材料
2014/10/10 职场文书
工作年限证明模板
2014/11/01 职场文书
2014年英语工作总结
2014/12/20 职场文书
二婚主持词
2015/06/30 职场文书