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中SSL服务的性能
Jul 15 NodeJs
轻松创建nodejs服务器(3):代码模块化
Dec 18 NodeJs
nodejs批量修改文件编码格式
Jan 22 NodeJs
Nodejs 搭建简单的Web服务器详解及实例
Nov 30 NodeJs
nodejs搭建本地http服务器教程
Mar 13 NodeJs
nodejs连接mysql数据库简单封装示例-mysql模块
Apr 10 NodeJs
nodejs 子进程正确的打开方式
Jul 03 NodeJs
nodejs使用express获取get和post传值及session验证的方法
Nov 09 NodeJs
nodejs超出最大的调用栈错误问题
Dec 27 NodeJs
详解nodejs通过响应回写的方式渲染页面资源
Apr 07 NodeJs
Nodejs异步回调之异常处理实例分析
Jun 22 NodeJs
NodeJS服务器实现gzip压缩的示例代码
Oct 12 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 pki加密技术(openssl)详解
2013/07/01 PHP
PHP程序员不应该忽略的3点
2015/10/09 PHP
PHP实现留言板功能的详细代码
2017/03/25 PHP
php连接mysql数据库最简单的实现方法
2019/09/24 PHP
javascript开发技术大全 第4章 直接量与字符集
2011/07/03 Javascript
同域jQuery(跨)iframe操作DOM(实例讲解)
2013/12/19 Javascript
文本域光标操作的jQuery扩展分享
2014/03/10 Javascript
Javascript中的默认参数详解
2014/10/22 Javascript
js实现缓冲运动效果的方法
2015/04/10 Javascript
基于jQuery实现的向下滑动二级菜单效果代码
2015/08/31 Javascript
分享经典的JavaScript开发技巧
2015/11/21 Javascript
vue.js中Vue-router 2.0基础实践教程
2017/05/08 Javascript
基于JS实现移动端左滑删除功能
2017/07/28 Javascript
vuex页面刷新后数据丢失的方法
2019/01/17 Javascript
vue cli 3.0 搭建项目的图文教程
2019/05/17 Javascript
详解微信小程序自定义组件的实现及数据交互
2019/07/22 Javascript
对layui初始化列表的CheckBox属性详解
2019/09/13 Javascript
如何使用JavaScript检测空闲的浏览器选项卡
2020/05/28 Javascript
[01:14:34]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第一局
2016/02/28 DOTA
python获取命令行输入参数列表的实例代码
2018/06/23 Python
uwsgi+nginx部署Django项目操作示例
2018/12/04 Python
python+ffmpeg批量去视频开头的方法
2019/01/09 Python
Python中内建模块collections如何使用
2020/05/27 Python
django inspectdb 操作已有数据库数据的使用步骤
2021/02/07 Python
Html5新标签datalist实现输入框与后台数据库数据的动态匹配
2017/05/18 HTML / CSS
医学院四年学习生活的自我评价
2013/11/06 职场文书
自荐信格式写作方法有哪些呢
2013/11/20 职场文书
2014党员整改措施思想汇报
2014/10/07 职场文书
幼儿园五一劳动节活动总结
2015/02/09 职场文书
党员干部公开承诺书范文
2015/04/27 职场文书
搞笑婚庆主持词
2015/06/29 职场文书
2016小学教师读书心得体会
2016/01/13 职场文书
Python打包为exe详细教程
2021/05/18 Python
Golang实现AES对称加密的过程详解
2021/05/20 Golang
php去除deprecated的实例方法
2021/11/17 PHP
Win10 最新稳定版本 21H2开始推送
2022/04/19 数码科技