新航路师徒学院

 找回密码
 立即注册
搜索
查看: 431|回复: 0

【新航路】node http.js 本地启服务js 源代码

[复制链接]

80

主题

114

帖子

560

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
560
发表于 2016-8-31 12:32:50 | 显示全部楼层 |阅读模式
  1. // 这是一个简单的Node HTTP服务器,能处理当前目录的文件
  2. // 并能实现两种特殊的URL用于测试
  3. // 用HTTP://localhost:8000或http://127.0.0.1:8000连接这个服务器

  4. // 首先加载所有需要用到的模块
  5. var http = require('http');        // Http服务器API
  6. var fs = require('fs');            // 用于处理本地文件
  7. var server = new http.Server();    // 创建新的HTTP服务器
  8. server.listen(8000);            // 监听端口8000

  9. // 使用on方法注册时间处理
  10. server.on('request', function(request, response) { // 当有request请求的时候触发处理函数
  11.     console.log('request');
  12.     console.log(__filename);
  13.     // 解析请求的URL
  14.     var url = require('url').parse(request.url);
  15.     // 特殊URL会让服务器在发送响应前先等待
  16.     switch(url.pathname) {   
  17.     case ''||'/' : // 模拟欢迎页,nodejs是高效流处理的方案,也可以通过配置文件来配置
  18.         fs.readFile('./index.html', function(err, content){
  19.             if(err) {
  20.                 response.writeHead(404, { 'Content-Type':'text/plain; charset="UTF-8"' });
  21.                 response.write(err.message);
  22.                 response.end();
  23.             } else {
  24.                 response.writeHead(200, { 'Content-Type' : 'text/html; charset=UTF-8' });
  25.                 response.write(content);
  26.                 response.end();
  27.             }
  28.         });
  29.         break;
  30.     // case '/test/delay':// 此处用于模拟缓慢的网络连接
  31.     //     // 使用查询字符串来获取延迟时长,或者2000毫秒
  32.     //     var delay = parseInt(url.query) || 2000;
  33.     //     // 设置响应状态和头
  34.     //     response.writeHead(200, {'Content-type':'text/plain; charset=UTF-8'});
  35.     //     // 立即开始编写响应主体
  36.     //     response.write('Sleeping for' + delay + ' milliseconds...');
  37.     //     // 在之后调用的另一个函数中完成响应
  38.     //     setTimeout(function(){
  39.     //         response.write('done.');
  40.     //         response.end();
  41.     //     }, delay);
  42.     //     break;
  43.     // case '/test/mirror':// 如果请求是test/mirror,则原文返回它
  44.     //     // 响应状态和头
  45.     //     response.writeHead(200, {'Content-type':'text/plain; charset=UTF-8'});
  46.     //     // 用请求的内容开始编写响应主体
  47.     //     response.write(request.mothod + ' ' + request.url + ' HTTP/' + request.httpVersion + '\r\n');
  48.     //     // 所有的请求头
  49.     //     for (var h in request.headers) {
  50.     //         response.write(h + ':' + request.headers[h] + '\r\n');
  51.     //     }
  52.     //     response.write('\r\n');// 使用额外的空白行来结束头
  53.     //     // 在这些事件处理程序函数中完成响应
  54.     //     // 当请求主体的数据块完成时,把其写入响应中
  55.     //     request.on('data', function(chunk) { response.write(chunk); });
  56.     //     // 当请求结束时,响应也完成
  57.     //     request.on('end', function(chunk){ response.end(); });
  58.     //     break;
  59.     case '/json' : // 模拟JSON数据返回
  60.         // 响应状态和头
  61.         response.writeHead(200, {'Content-type':'application/json; charset=UTF-8'});
  62.         response.write(JSON.stringify({test:'success'}));
  63.         response.end();
  64.         break;
  65.     default:// 处理来自本地目录的文件
  66.         var filename = url.pathname.substring(1);    // 去掉前导'/'
  67.         var type = getType(filename.substring(filename.lastIndexOf('.')+1));
  68.         // 异步读取文件,并将内容作为单独的数据模块传给回调函数
  69.         // 对于确实很大的文件,使用流API fs.createReadStream()更好
  70.         fs.readFile(filename, function(err, content){
  71.             if(err) {
  72.                 response.writeHead(404, { 'Content-Type':'text/plain; charset="UTF-8"' });
  73.                 response.write(err.message);
  74.                 response.end();
  75.             } else {
  76.                 response.writeHead(200, { 'Content-Type' : type });
  77.                 response.write(content);
  78.                 response.end();
  79.             }
  80.         });
  81.         break;
  82.     }
  83.      
  84. });
  85. function getType(endTag){
  86.     var type=null;
  87.     switch(endTag){
  88.     case 'html' :
  89.     case 'htm' :
  90.         type = 'text/html; charset=UTF-8';
  91.         break;
  92.     case 'js' :
  93.         type = 'application/javascript; charset="UTF-8"';
  94.         break;
  95.     case 'css' :
  96.         type = 'text/css; charset="UTF-8"';
  97.         break;
  98.     case 'txt' :
  99.         type = 'text/plain; charset="UTF-8"';
  100.         break;
  101.     case 'manifest' :
  102.         type = 'text/cache-manifest; charset="UTF-8"';
  103.         break;
  104.     default :
  105.         type = 'application/octet-stream';
  106.         break;
  107.     }
  108.     return type;
  109. }
复制代码


安装 node

copy 源代码 为http.js 放到 对应目录

node http.js  就可把本目录开启本地服务
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

新航路师徒学院 ( 京ICP备16035622号

GMT+8, 2018-7-22 05:10 , Processed in 0.148342 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表