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文件操作模块FS(File System)常用函数简明总结
Jun 05 NodeJs
基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
Sep 26 NodeJs
Nodejs为什么选择javascript为载体语言
Jan 13 NodeJs
nodeJS代码实现计算交社保是否合适
Mar 09 NodeJs
nodejs中使用多线程编程的方法实例
Mar 24 NodeJs
Nodejs全局安装和本地安装的不同之处
Jul 04 NodeJs
Nodejs从有门道无门菜鸟起飞必看教程
Jul 20 NodeJs
nodejs实现发出蜂鸣声音(系统报警声)的方法
Jan 18 NodeJs
详解nodeJS中读写文件方法的区别
Mar 06 NodeJs
详解nodejs微信公众号开发——4.自动回复各种消息
Apr 11 NodeJs
CentOS 安装NodeJS V8.0.0的方法
Jun 15 NodeJs
NodeJS实现同步的方法
Mar 02 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函数(简单整理)
2010/04/30 PHP
PHP JSON 数据解析代码
2010/05/26 PHP
php获取apk包信息的方法
2014/08/15 PHP
php简单获取复选框值的方法
2016/05/11 PHP
Laravel框架下的Contracts契约详解
2020/03/17 PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
2020/06/05 PHP
js活用事件触发对象动作
2008/08/10 Javascript
JS版网站风格切换实例代码
2008/10/06 Javascript
window.location和document.location的区别分析
2008/12/23 Javascript
Google Map API更新实现用户自定义标注坐标
2009/07/29 Javascript
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
javascript简单事件处理和with用法介绍
2013/09/16 Javascript
jQuery中filter()方法用法实例
2015/01/06 Javascript
jquery.mobile 共同布局遇到的问题小结
2015/02/10 Javascript
avalonjs制作响应式瀑布流特效
2015/05/06 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
highCharts提示框中显示当前时间的方法
2019/01/18 Javascript
JavaScript类型相关的常用操作总结
2019/02/14 Javascript
使用JS判断页面是首次被加载还是刷新
2019/05/26 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
2019/12/17 Javascript
Element Backtop回到顶部的具体使用
2020/07/27 Javascript
Python 自动安装 Rising 杀毒软件
2009/04/24 Python
python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
2014/06/09 Python
Python中捕捉详细异常信息的代码示例
2014/09/18 Python
详解Python中的正则表达式的用法
2015/04/09 Python
windows下pycharm安装、创建文件、配置默认模板
2018/07/31 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
2019/04/26 Python
Django 对IP访问频率进行限制的例子
2019/08/30 Python
Python高阶函数、常用内置函数用法实例分析
2019/12/26 Python
keras导入weights方式
2020/06/12 Python
美国演唱会和体育门票购买网站:Ticketnetwork
2018/10/19 全球购物
英国名牌男装店:Standout
2021/02/17 全球购物
大学生职业生涯规划书模版
2013/12/30 职场文书
绩效管理实施方案
2014/03/19 职场文书
高考升学宴答谢词
2015/01/20 职场文书
北京天坛导游词
2015/02/12 职场文书