利用node构建本地服务

首先安装下node.js,地址为https://nodejs.org/en/,然后安装npm。

node.js的中文api地址http://nodeapi.ucdok.com/#/api/

一些模块的用法可以在自己的终端试试哦,通过node这个命令进入node.js环境。如下图

利用node构建本地服务,用到的模块有http、fs、path着三个模块,其中http是用来创建服务的;fs时文件模块,可读写等本地文件;path是一套用于处理和转换文件路径的工具集(具体见http://nodeapi.ucdok.com/#/api/path.html)。

这个构建的原理跟nginx代理访问本地页面是一样的~,将ip(port)映射到本地的静态资源的路径,然后根据url的相对路径找到资源,有点表达的词不达意~

说一下简单的流程

  • 利用http模块的createServer方法起一个服务(可以把request和response打印出来哦,加深理解),listen实现对端口的监听
  • 变量staticUrl保存着我们要访问的静态资源的路径。用path解析url得到相对路径,把staticUrl与之拼接起来就可以得到绝对路径了,用强大的fs模块读取文件,就ok了
  • 有可能url访问的不适本地的资源~嘿嘿,我们就要做些处理了,类似如404
  • 由于加载的html带有js img css各种不同类型的文件,用过ajax的就知道我们要设置好请求头了,不过这里我们是将本地的资源返回给浏览器这个客户段,所以我们要设置好响应头~就建立了一个一个公共的mine.js用来存放文件类型

不多说啦,那就直接看下面的代码吧~

  1. var http = require('http');
  2. var fs = require('fs');
  3. var path = require('path');
  4. var mine = require('./mine').types; //content-type格式
  5. //静态资源的路径
  6. var staticUrl = '/Users/admin/Documents/materials/demo/excise';
  7. var server = http.createServer(function(req,res){
  8. //req,res均为对象,req是http.IncomingMessage的一个实例,res是http.ServerResponse的一个实例
  9. //console.log(res);
  10. var url = req.url;
  11. //浏览器输入localhost:9000/index.html, 那url == '/index.html'
  12. //console.log(url);
  13. var file = staticUrl + url,
  14. type = path.extname(url); //path.extname 返回路径中文件的扩展名
  15. //console.log(type)
  16. type = type ? type.split('.')[1] : 'unknown';
  17. fs.readFile(file , function(err,data){
  18. if(err){
  19. console.log('访问'+staticUrl+req.url+'出错');
  20. res.writeHeader(404,{
  21. 'content-type' : 'text/html;charset="utf-8"'
  22. });
  23. res.write('<h1>404错误</h1><p>你要找的页面不存在</p>');
  24. }else{
  25. res.writeHeader(200,{
  26. 'content-type' : mine[type] || 'text/html;charset="utf-8"'
  27. });
  28. res.write(data); //将index.html显示在浏览器(客服端)
  29. }
  30. res.end();
  31. });
  32. }).listen(9000);
  33. console.log('服务器开启成功\n\n访问路径为http://localhost:9000/index.html\n');

使用过ajax的筒靴肯定知道contentType,这是对文件类型的设置。由于我们构建的是一个项目的服务,那么文件类型就多了起来,所以建立一个公共的mine.js用来存放文件类型

  1. // 数据格式标签mime的主要类型
  2. // 参考http://www.w3school.com.cn/media/media_mimeref.asp
  3. /*
  4. application/
  5. text/
  6. image/
  7. audio/
  8. video/
  9. chemical/
  10. message/
  11. multipart/
  12. model/
  13. */
  14. exports.types = {
  15. "html": "text/html",
  16. "xml": "text/xml",
  17. "js": "text/javascript",
  18. "css": "text/css",
  19. "json": "application/json",
  20. "txt": "text/plain",
  21. "pdf": "application/pdf",
  22. "doc": "application/msword",
  23. "xls": "application/vnd.ms-excel",
  24. "ico": "image/x-icon",
  25. "jpeg": "image/jpeg",
  26. "jpg": "image/jpeg",
  27. "png": "image/png",
  28. "bmp": "image/bmp",
  29. "svg": "image/svg+xml",
  30. "tiff": "image/tiff",
  31. "gif": "image/gif",
  32. "swf": "application/x-shockwave-flash",
  33. "wav": "audio/x-wav",
  34. "wma": "audio/x-ms-wma",
  35. "mp3": "audio/mpeg",
  36. "wmv": "video/x-ms-wmv",
  37. "avi": "video/x-msvideo",
  38. "gz": "application/x-gzip",
  39. "manifest": "text/cache-manifest"
  40. };

利用node构建本地服务的更多相关文章

  1. 用node搭建本地服务环境

    const express = require('express'); const path = require('path'); const request = require('request') ...

  2. 利用node搭建本地服务器调试代码

    在命令符中输入 npm install -g live-server安装live-server 安装完成后在项目文件夹下打开cmd,输入live-server启动

  3. react-router-dom和本地服务本地开发 (node、webpack)

    场景 使用react 做开发,避免会使用react-router React Router 已经是V4的版本 React Router 目前已经被划分成了三个包:react-router,react- ...

  4. Python 启动本地服务

    在 Linux 服务器上或安装了 Python 的机器上,Python自带了一个WEB服务器 SimpleHTTPServer,我们可以很简单的使用  python -m SimpleHTTPServ ...

  5. 利用OpenShift托管Node.js Web服务进行微信公众号开发

    最近写了一个微信的翻译机器人.用户只要关注该公众号,发送英文的消息,就能收到中文翻译的回复.有兴趣的读者可以扫描下面的二维码关注该公众号,尝试发送英文单词试试看.(有时候第一次发送单词会收到“该公众号 ...

  6. 微服务架构 - 基于Harbor构建本地镜像仓库

    之前写过<搭建docker本地镜像仓库并提供权限校验及UI界面>文章,然后有同仁评论道这样做太复杂了,如果Harbor来搭建会更简单同时功能也更强大.于是抽时间研究了基于Harbor构建本 ...

  7. 利用Node 搭配uglify-js压缩js文件,批量下载图片到本地

    Node的便民技巧-- 压缩代码 下载图片 压缩代码 相信很多前端的同学都会在上线前压缩JS代码,现在的Gulp Webpack Grunt......都能轻松实现.但问题来了,这些都不会,难道就要面 ...

  8. node本地服务启动报Error: listen EADDRINUSE解决方法

    Error: listen EADDRINUSE 127.0.0.1:1337 at Object.exports._errnoException (util.js:1018:11) at expor ...

  9. 在服务端C#如何利用NPOI构建Excel模板

    目前本人接触过两种模板导出的方式:(1)C#利用NPOI接口制作Excel模板,在服务端用数据渲染模板(2)在前端利用前人搭建好的框架,利用office编写xml制作模板,在客户端进行数据的渲染,导出 ...

随机推荐

  1. SpingMVC ModelAndView, Model,Control以及参数传递

    1.web.xml 配置: <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class& ...

  2. iOS开发 GET、POST请求方法(NSURLConnection篇)

    Web Service使用的主要协议是HTTP协议,即超文本传输协议. HTTP/1.1协议共定义了8种请求方法(OPTIONS.HEAD.GET.POST.PUT.DELETE.TRACE.CONN ...

  3. Broadcom有线网卡在Windows 8/8.1/10下使用系统自带驱动会断网的解决办法

    出处:qiuyi21.cnblogs.com 1.下载最新正式版驱动程序 上Broadcom官方网站http://www.broadcom.com/support/ethernet_nic/downl ...

  4. css3动画2(transform用法)

    1.直接写在样式里,比如一个小箭头,transform:rotate(135deg)即可 2.写动画过程,@keyframes和transform和animation组合起来用 写在@keyframe ...

  5. 用adox 取 access 自增列

    百度很久 最后在 (.NET2.0下用ADOX动态创建ACCESS数据库(C#)) http://blog.csdn.net/black4371/article/details/4423739 找到了 ...

  6. ubuntu中搭建php7+mongodb方法

    首先照着这篇文章操作 http://blog.csdn.net/Toshiya14/article/details/51417076 结果发现一直报Cannot find OpenSSL's libr ...

  7. vim命令的妙用

    进来看到了一篇博文,讲述的是无插件Vim编程技巧,然后看到里面还有一些其余的关于vim的博文,感觉值得收藏:酷 壳 – CoolShell.cn 这里挑选出其中一篇,这也是自己已经学习过的: 无插件V ...

  8. HostOnly Cookie和HttpOnly Cookie

    怎么使用Cookie? 通常我们有两种方式给浏览器设置或获取Cookie,分别是HTTP Response Headers中的Set-Cookie Header和HTTP Request Header ...

  9. Python实现插件机制——自动import一个目录下的所有.py文件

    假设有这样一个目录结构: /src          main.py          /plugins                __init__.py                a.py  ...

  10. Python内置函数总结

    1.abs() 取绝对值 1 2 3 4 >>> a = abs(-7) >>> b= abs(7) >>>print(a,b) 7 7 2.al ...