利用node构建本地服务
利用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用来存放文件类型
不多说啦,那就直接看下面的代码吧~
var http = require('http');
var fs = require('fs');
var path = require('path');
var mine = require('./mine').types; //content-type格式
//静态资源的路径
var staticUrl = '/Users/admin/Documents/materials/demo/excise';
var server = http.createServer(function(req,res){
//req,res均为对象,req是http.IncomingMessage的一个实例,res是http.ServerResponse的一个实例
//console.log(res);
var url = req.url;
//浏览器输入localhost:9000/index.html, 那url == '/index.html'
//console.log(url);
var file = staticUrl + url,
type = path.extname(url); //path.extname 返回路径中文件的扩展名
//console.log(type)
type = type ? type.split('.')[1] : 'unknown';
fs.readFile(file , function(err,data){
if(err){
console.log('访问'+staticUrl+req.url+'出错');
res.writeHeader(404,{
'content-type' : 'text/html;charset="utf-8"'
});
res.write('<h1>404错误</h1><p>你要找的页面不存在</p>');
}else{
res.writeHeader(200,{
'content-type' : mine[type] || 'text/html;charset="utf-8"'
});
res.write(data); //将index.html显示在浏览器(客服端)
}
res.end();
});
}).listen(9000);
console.log('服务器开启成功\n\n访问路径为http://localhost:9000/index.html\n');
使用过ajax的筒靴肯定知道contentType,这是对文件类型的设置。由于我们构建的是一个项目的服务,那么文件类型就多了起来,所以建立一个公共的mine.js用来存放文件类型
// 数据格式标签mime的主要类型
// 参考http://www.w3school.com.cn/media/media_mimeref.asp
/*
application/
text/
image/
audio/
video/
chemical/
message/
multipart/
model/
*/
exports.types = {
"html": "text/html",
"xml": "text/xml",
"js": "text/javascript",
"css": "text/css",
"json": "application/json",
"txt": "text/plain",
"pdf": "application/pdf",
"doc": "application/msword",
"xls": "application/vnd.ms-excel",
"ico": "image/x-icon",
"jpeg": "image/jpeg",
"jpg": "image/jpeg",
"png": "image/png",
"bmp": "image/bmp",
"svg": "image/svg+xml",
"tiff": "image/tiff",
"gif": "image/gif",
"swf": "application/x-shockwave-flash",
"wav": "audio/x-wav",
"wma": "audio/x-ms-wma",
"mp3": "audio/mpeg",
"wmv": "video/x-ms-wmv",
"avi": "video/x-msvideo",
"gz": "application/x-gzip",
"manifest": "text/cache-manifest"
};
利用node构建本地服务的更多相关文章
- 用node搭建本地服务环境
const express = require('express'); const path = require('path'); const request = require('request') ...
- 利用node搭建本地服务器调试代码
在命令符中输入 npm install -g live-server安装live-server 安装完成后在项目文件夹下打开cmd,输入live-server启动
- react-router-dom和本地服务本地开发 (node、webpack)
场景 使用react 做开发,避免会使用react-router React Router 已经是V4的版本 React Router 目前已经被划分成了三个包:react-router,react- ...
- Python 启动本地服务
在 Linux 服务器上或安装了 Python 的机器上,Python自带了一个WEB服务器 SimpleHTTPServer,我们可以很简单的使用 python -m SimpleHTTPServ ...
- 利用OpenShift托管Node.js Web服务进行微信公众号开发
最近写了一个微信的翻译机器人.用户只要关注该公众号,发送英文的消息,就能收到中文翻译的回复.有兴趣的读者可以扫描下面的二维码关注该公众号,尝试发送英文单词试试看.(有时候第一次发送单词会收到“该公众号 ...
- 微服务架构 - 基于Harbor构建本地镜像仓库
之前写过<搭建docker本地镜像仓库并提供权限校验及UI界面>文章,然后有同仁评论道这样做太复杂了,如果Harbor来搭建会更简单同时功能也更强大.于是抽时间研究了基于Harbor构建本 ...
- 利用Node 搭配uglify-js压缩js文件,批量下载图片到本地
Node的便民技巧-- 压缩代码 下载图片 压缩代码 相信很多前端的同学都会在上线前压缩JS代码,现在的Gulp Webpack Grunt......都能轻松实现.但问题来了,这些都不会,难道就要面 ...
- node本地服务启动报Error: listen EADDRINUSE解决方法
Error: listen EADDRINUSE 127.0.0.1:1337 at Object.exports._errnoException (util.js:1018:11) at expor ...
- 在服务端C#如何利用NPOI构建Excel模板
目前本人接触过两种模板导出的方式:(1)C#利用NPOI接口制作Excel模板,在服务端用数据渲染模板(2)在前端利用前人搭建好的框架,利用office编写xml制作模板,在客户端进行数据的渲染,导出 ...
随机推荐
- Access denied for user 'root'@'localhost' (using password:YES)
版权所有,未经博主允许不得转载. 今天发现服务器mysql连接不上,报 can't connect to mysql server on 'root'@'ip' (61) 照例ssh到服务器,发现my ...
- [转载]python操作excel使用win32com
原文链接:http://blog.163.com/yang_jianli/blog/static/16199000620138532243782/ 使用COM接口,直接操作EXCEL(只能在Win上) ...
- The source attachment does not contain the source for the file ActionSupport.class 错误
报错 Syntax error, insert ";" to complete FieldDeclaration 报错 The source attachment does ...
- Druid Monitor监控JavaSE,杀cmd端口进程
1.需要在启动命令添加相关jvm参数 -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname -Dcom.sun.management.jm ...
- HP_UX系统批量创建LV或raw设备的Shell 脚本
mkdir /dev/yjfsvg02 #创建lvm v2.0的VG,PE Size=64MB,不需要执行mknod创建group文件了.vgcreate -V 2.0 -s 64 -S 10t /d ...
- Linux常用命令1
jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有Java进程pid的命令. jps [ options ] [ host ...
- iOS MVC, MVVM
在iOS app里,如果用传统的MVC模式,Model层就是数据,View层就是Storyboard,nib文件或者构建UI的代码,Controller层就是ViewController,负责协调Mo ...
- php限定时间内同一ip只能访问一次
建立一个数据表 CREATE TABLE `clicks` ( `ip` INT UNSIGNED NOT NULL , `time1` INT UNSIGNED NOT NULL , `time2` ...
- [转帖]FPGA开发工具汇总
原帖:http://blog.chinaaet.com/yocan/p/5100017074 ----------------------------------------------------- ...
- ( 转)UVM验证方法学之一验证平台
在现代IC设计流程中,当设计人员根据设计规格说明书完成RTL代码之后,验证人员开始验证这些代码(通常称其为DUT,Design Under Test).验证工作主要保证从设计规格说明书到RTL转变的正 ...