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教程 安装express及配置app.js文件的详细步骤
May 11 NodeJs
轻松创建nodejs服务器(7):阻塞操作的实现
Dec 18 NodeJs
用nodejs搭建websocket服务器
Jan 23 NodeJs
nodejs利用ajax实现网页无刷新上传图片实例代码
Jun 06 NodeJs
nodejs 子进程正确的打开方式
Jul 03 NodeJs
详解Nodejs 通过 fs.createWriteStream 保存文件
Oct 10 NodeJs
nodejs中安装ghost出错的原因及解决方法
Oct 23 NodeJs
详解NODEJS基于FFMPEG视频推流测试
Nov 17 NodeJs
关于Mac下安装nodejs、npm和cnpm的教程
Apr 11 NodeJs
NodeJS如何实现同步的方法示例
Aug 24 NodeJs
详解从NodeJS搭建中间层再谈前后端分离
Nov 13 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
linux系统上支持php的 iconv()函数的方法
2011/10/01 PHP
php读取csc文件并输出
2015/05/21 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
2016/05/16 PHP
深入理解PHP中的empty和isset函数
2016/05/26 PHP
php+flash+jQuery多图片上传源码分享
2020/07/27 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
php微信公众号开发之微信企业付款给个人
2018/10/04 PHP
Yii框架数据库查询、增加、删除操作示例
2019/10/14 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
2020/04/07 PHP
锋利的jQuery 要点归纳(二) jQuery中的DOM操作(下)
2010/03/23 Javascript
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
2010/06/30 Javascript
使用Browserify配合jQuery进行编程的超级指南
2015/07/28 Javascript
JS设置cookie、读取cookie
2016/02/24 Javascript
js实现产品缩略图效果
2017/03/10 Javascript
微信小程序开发之实现自定义Toast弹框
2017/06/08 Javascript
带你快速理解javascript中的事件模型
2017/08/14 Javascript
JS实现简单的星期格式转换功能示例
2018/07/23 Javascript
Angular服务Request异步请求的实例讲解
2018/08/13 Javascript
实例详解vue.js浅度监听和深度监听及watch用法
2018/08/16 Javascript
webpack proxy 使用(代理的使用)
2020/01/10 Javascript
实例讲解React 组件
2020/07/07 Javascript
使用Python实现BT种子和磁力链接的相互转换
2015/11/09 Python
Python实现计算最小编辑距离
2016/03/17 Python
Django实现自定义404,500页面教程
2017/03/26 Python
python登录并爬取淘宝信息代码示例
2017/12/09 Python
PyQT实现多窗口切换
2018/04/20 Python
python提取log文件内容并画出图表
2019/07/08 Python
40行Python代码实现天气预报和每日鸡汤推送功能
2020/02/27 Python
keras 获取某层输出 获取复用层的多次输出实例
2020/05/23 Python
Python编写万花尺图案实例
2021/01/03 Python
应届优秀本科大学毕业生自我鉴定
2014/01/21 职场文书
名企HR怎样看待求职信
2014/02/23 职场文书
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
《亲亲我的妈妈》观后感(3篇)
2019/09/26 职场文书
Python Django获取URL中的数据详解
2021/11/01 Python