Nodejs Web应用基础开发实例(二)-Web服务器

Nodejs Web基础开发实例(二)

循序渐进地通过几个实例展示如何通过Nodejs实现Web数据库应用的开发:

  1. 实例一:建立简单的HTTP服务器
  2. 实例二:建立静态HTML页面Web服务器
  3. 实例三:改进的静态页面Web服务器
  4. 实例四:使用express框架建立web服务器
  5. 实例五:访问mysql数据库-查询

实例二:建立静态HTML页面Web服务器

实例一中仅建立了简单的http服务器可以向用户返回响应数据。如果要返回页面HTML内容,一个办法是用response对象的write方法返回全部html字符串,这种方法当然笨拙和死板。
另一种办法是编辑好HTML文件保存在服务器上,http服务器只需要根据用户请求的url找到该HTML文件,打开读取所有内容返回给用户浏览器即可。
本实例将展示nodejs如何提取url中的文件路径,并打开文件,返回响应信息。

  1. 除导入http模块外,访问文件系统,提取url分别需要导入fs模块和url模块。
  2. 调用url模块的parse方法可以从request对象的url属性中解析出用户请求的文件路径pathname,如果是根路径“/”,则认为用户默认访问“index.html”文件。
  3. 调用fs模块的readFile方法读取该路径的文件,在回调函数中处理打开文件得到的数据,数据保存在回调函数的data参数中。
  4. 通过response对象构造http响应头,注意内容类型设置为“text/html”,浏览器接收到响应数据后将按照html进行显示。

需要注意的是:该实例如果打开的HTML页面中包含图片、CSS样式表等,则出现打不开的情况。为什么呢?因为readFile读文件前并没有判断文件类型,打开的文件数据均转换为字符串用response对象响应给浏览器,且头部的内容类型设置为“text/html”,导致浏览器均按html处理,导致无法正常显示图片文件等。
改进方法将在实例三中介绍。

var http = require('http');
var fs = require('fs');
var url = require('url');
// 创建服务器
http.createServer( function (request, response) {  
   // 解析请求,包括文件名
   var pathname = url.parse(request.url).pathname;
   if(pathname=='/')
   		pathname='/index.html';
   // 输出请求的文件名
   console.log("Request for " + pathname + " received.");
   
   // 从文件系统中读取请求的文件内容
   fs.readFile(pathname.substr(1), function (err, data) {
      if (err) {
         console.log(err);
         // 打开文件出错,构造HTTP 状态码: 404 :表示文件不存在
         // Content Type: text/html
         response.writeHead(404, {'Content-Type': 'text/html'});
      }else{             
         // 构造响应头部,HTTP 状态码: 200 : OK
         // Content Type: text/html
         response.writeHead(200, {'Content-Type': 'text/html'});    
         
         // http响应的数据部分写入文件数据data
         response.write(data.toString());        
      }
      //  发送响应数据
      response.end();
   });   
}).listen(8000);
 
// 控制台会输出以下信息
console.log('Server running at http://127.0.0.1:8000/');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值