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入门详解(多篇文章结合)
Mar 07 NodeJs
Nodejs使用mysql模块之获得更新和删除影响的行数的方法
Mar 18 NodeJs
NodeJS学习笔记之Connect中间件应用实例
Jan 27 NodeJs
Nodejs实战心得之eventproxy模块控制并发
Oct 27 NodeJs
详解NodeJs支付宝移动支付签名及验签
Jan 06 NodeJs
Nodejs实现短信验证码功能
Feb 09 NodeJs
nodejs个人博客开发第二步 入口文件
Apr 12 NodeJs
详解nodeJs文件系统(fs)与流(stream)
Jan 24 NodeJs
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
Feb 02 NodeJs
深入理解nodejs搭建静态服务器(实现命令行)
Feb 05 NodeJs
M2实现Nodejs项目自动部署的方法步骤
May 05 NodeJs
搭建一个nodejs脚手架的方法步骤
Jun 28 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/07/12 PHP
php str_pad() 将字符串填充成指定长度的字符串
2010/02/23 PHP
php实现在线生成条形码示例分享(条形码生成器)
2013/12/30 PHP
测试php连接mysql是否成功的代码分享
2014/01/24 PHP
zen cart实现订单中增加paypal中预留电话的方法
2016/07/12 PHP
php 5.4 全新的代码复用Trait详解
2017/01/05 PHP
jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
2012/05/23 Javascript
js防止表单重复提交的两种方法
2013/09/30 Javascript
当鼠标移动时出现特效的JQuery代码
2013/11/08 Javascript
解析Javascript中中括号“[]”的多义性
2013/12/03 Javascript
整理Javascript流程控制语句学习笔记
2015/11/29 Javascript
Angularjs 实现分页功能及示例代码
2016/09/14 Javascript
360提示[高危]使用存在漏洞的JQuery版本的解决方法
2017/10/27 jQuery
vue-cli 3.0 自定义vue.config.js文件,多页构建的方法
2018/09/19 Javascript
vue实现输入框的模糊查询的示例代码(节流函数的应用场景)
2019/09/01 Javascript
微信小程序修改checkbox的样式代码实例
2020/01/21 Javascript
Python中的进程分支fork和exec详解
2015/04/11 Python
Python检测一个对象是否为字符串类的方法
2015/05/21 Python
详解 Python中LEGB和闭包及装饰器
2017/08/03 Python
基于python代码实现简易滤除数字的方法
2018/07/17 Python
Python 使用Numpy对矩阵进行转置的方法
2019/01/28 Python
python实现QQ批量登录功能
2019/06/19 Python
python调用webservice接口的实现
2019/07/12 Python
PyCharm搭建Spark开发环境的实现步骤
2019/09/05 Python
python路径的写法及目录的获取方式
2019/12/26 Python
详解pandas赋值失败问题解决
2020/11/29 Python
彪马俄罗斯官网:PUMA俄罗斯
2019/07/13 全球购物
C语言如何决定使用那种整数类型
2016/11/26 面试题
母亲节演讲稿范文
2014/01/02 职场文书
大学生学习自我评价
2014/01/13 职场文书
信息服务专业毕业生求职信
2014/03/02 职场文书
岗位明星事迹材料
2014/05/18 职场文书
恋恋笔记本观后感
2015/06/16 职场文书
html+css合并表格边框的示例代码
2021/03/31 HTML / CSS
Vue elementUI表单嵌套表格并对每行进行校验详解
2022/02/18 Vue.js
frg-100简单操作(设置)说明
2022/04/05 无线电