在浏览器中,不同的请求应该作出不同的响应

我们可以从请求req中的url获得请求的内容

然后我们就可以通过判断请求的url来做响应

代码如下:

  1. //根据用户的不同请求,服务器做出不同的响应
  2. //
  3. //1.加载http模块
  4. //
  5. var http=require('http');
  6.  
  7. //2.创建http服务,监听
  8. http.createServer(function(req,res){
  9. //获取用户请求req.url
  10. //console.log(req.url);
  11. //结束响应
  12. //res.end();
  13. res.setHeader('Content-Type','text/plain;charset=utf-8');
  14. //通过req.url获取用户请求的路径,获得不同的响应
  15. if(req.url==='/'||req.url==='/index')
  16. res.end('hello index');
  17. else if(req.url==='/login')
  18. res.end('hello login');
  19. else if(req.url==='/list')
  20. res.end('hello list');
  21. else
  22. res.end('404');
  23.  
  24. }).listen(8080,function(){
  25. console.log('http://localhost:8080');
  26.  
  27. })

如果需要响应html文件,需要有fs,path模块

代码如下

  1. //根据用户请求不同,响应不同的html
  2. var http=require('http');
  3. //加载fs模块
  4. var fs=require('fs');
  5. //加载path模块
  6. var path=require('path');
  7.  
  8. http.createServer(function(req,res){
  9.  
  10. if(req.url==='/'||req.url==='/index')
  11. {
  12. //如果这里传utf-8,返回的data是字符串,但我们不需要将其转为字符串。因为我们读取的是二进制,我们不需要将二进制转为字符串再将字符串转为二进制
  13. fs.readFile(path.join(__dirname,'html','xx1.html'),function(err,data){
  14. if(err)
  15. {
  16. console.log(err);
  17. }
  18. //把读取的html发送
  19. res.end(data);//这里面不会乱码,因为html文件了已经有utf-8了
  20. })
  21. }
  22. else if(req.url==='/login')
  23. {
  24. fs.readFile(path.join(__dirname,'html','xx2.html'),function(err,data){
  25. if(err)
  26. {
  27. console.log(err);
  28. }
  29. //把读取的html发送
  30. res.end(data);//这里面不会乱码,因为html文件了已经有utf-8了
  31. })
  32. }
  33. else if(res.url==='/list')
  34. {
  35. fs.readFile(path.join(__dirname,'html','xx3.html'),function(err,data){
  36. if(err)
  37. {
  38. console.log(err);
  39. }
  40. //把读取的html发送
  41. res.end(data);//这里面不会乱码,因为html文件了已经有utf-8了
  42. })
  43. }
  44. else
  45. res.end('404');
  46.  
  47. }).listen(9090,function(){
  48. console.log('http://localhost:9090');
  49. })

如果响应的html文件里面有图片请求,例如

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. <img src="../pic/1.png" />
  9.  
  10. </body>
  11. </html>

这样是解析不了图片的

因为在请求该html文件的时候,也请求了图片,请求图片的url如下图,而我们的判断中是没有url==='/pic/1.png'的,所以我们应该在代码中加上这个判断

  1. else if(req.url==='/pic/1.png')//要单独请求图片
  2. {
  3. fs.readFile(path.join(__dirname,'pic','1.png'),function(err,data){
  4. if(err)
  5. {
  6. console.log(err);
  7. }
  8. res.setHeader('Content-Type','image/png');//要加请求头
  9.  
  10. res.end(data);
  11. })
  12. }

css文件也可以这样请求,但是我们实际上不可能每个请求都要写在代码里,这样十分低效,我们可以将这些文件存在一个或者几个文件夹内,然后通过路径拼接来实现

  1. //http加载
  2. var http=require('http');
  3. var path=require('path');
  4. var fs=require('fs');
  5. var mime=require('mime');
  6. http.createServer(function(req,res){
  7. //1.获取用户请求路径
  8. //req.url
  9. ///css/index.css
  10. ///2.获取public目录完整路径
  11. var publicDir=path.join(__dirname,'public');
  12. //3.根据public的路径和用户请求,最终获得完整路径
  13. var filename=path.join(publicDir,req.url);
  14. console.log(filename);
  15. //res.end('over');
  16. //4.根据文件路径去读取文件,如果读取到,就将文件返回给用户,如果读取不到,返回404
  17. fs.readFile(filename,function(err,data){
  18. if(err){
  19. res.end('文件不存在404');
  20. }else{
  21. //通过第三方模块minme,来判断不同资源对应的Content-Type类型
  22. //filemane只要有后缀进行
  23. res.setHeader('Content-Type',mime.getType(filename));
  24. //如果找到了用户要读取的文件,那么直接把该文件返回给用户
  25. res.end(data);
  26. }
  27. })
  28. }).listen(9090,function(){
  29. console.log('http://localhost:9090');
  30. })

其中mime

node——服务器根据不同请求作出不同响应+响应html文件等文件的更多相关文章

  1. node——进阶版服务器根据不同请求作出不同响应+响应html文件等文件

    文件目录结构如下 resource文件里面放了css文件和图片等,view文件里面是html文件 <!DOCTYPE html> <html lang="en"& ...

  2. 图解HTTP权威指南(三)| Web服务器对HTTP请求的处理和响应

    作者简介   李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷.喜欢钻研底层技术,认为底层基础才是王道.一切新技术都离不开操作系统(CPU.内存.磁盘).网络 ...

  3. http请求报文格式和响应报文格式

    转载 出处 超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议.HTTP 是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求 ...

  4. Node fs, url, http 组合小型的服务器 ( 满足html请求, get, post 传值 )

    <script type="text/javascript"> /* * 引入模块 */ var http = require('http'); var url = r ...

  5. Node.js之HTTP请求与响应

    在C#.OC中也是客户端发起一个请求,服务端作出响应.我们可以把这个过程抽象理解 . 1.客户端给服务端发起请求相当于向服务端写入一个流(writable) 2.服务端读取客户端的流(readable ...

  6. Ajax--Ajax基于原生javascript:创建Ajax对象、链接服务器、发送请求、接受响应结果

    Ajax概述 异步:指某段程序执行时不会阻塞其它程序执行,其表现形式为程序的执行顺序不依赖程序本身的书写顺序,相反则为同步. 同步请求: 请求是由浏览器发送 页面会刷新 异步请求: 请求是由浏览器的一 ...

  7. 2、node服务器

    一.简单的node服务器搭建 1.首先新建一个名为server.js的文件(文件名随意,后缀名必须是.js) 2.粘贴进文件以下内容 //引入http模块 const http = require(& ...

  8. HTTP请求过程和状态响应码

    HTTP请求过程 我们在浏览器中输入一个URL,回车之后便可以在浏览器中观察到页面内容.实际上,这个过程是浏览器向网站所在的服务器发送了一个请求,网站服务器接收到这个请求后进行处理和解析,然后返回对应 ...

  9. nodejs向远程服务器发送post请求----融云Web SDK/客户端获取token

    最近要用到一个叫融云的及时通讯的SDK,在获取token这个步骤的时候有点卡顿,以防以后碰到类似的问题,再此记录一下. 客户端通过融云 SDK 每次连接服务器时,都需要向服务器提供 Token,以便验 ...

随机推荐

  1. 【disconf】环境搭建【linux】

     1.搭建disconf需要安装的配置. 安装Linux:CentOS7     安装Zookeeper:zookeeper-3.4.6     安装Redis:redis-3.0.0     安装N ...

  2. JavaScript 三要素

    一个完整的JavaScript 实现由3部分组成: ECMACcript ECMAScript 规定了这门语言的下列组成部分: 语法 类型 语句 关键字.保留字 操作符 对象为什么要使用DOM?   ...

  3. HDU2188 - 悼念512汶川大地震遇难同胞——选拔志愿者【巴什博弈】

    对于四川同胞遭受的灾难,全国人民纷纷伸出援助之手,几乎每个省市都派出了大量的救援人员,这其中包括抢险救灾的武警部队,治疗和防疫的医护人员,以及进行心理疏导的心理学专家.根据要求,我校也有一个奔赴灾区救 ...

  4. [NoiPlus2016]天天爱跑步

    巨坑 树剖学的好啊!---sfailsth 把一段路径拆成两段,向上和S->LCA,向下LCA->T 用维护重链什么的操作搞一下. sfailsth学长真不容易啊...考场上rush了4. ...

  5. cogs 1143. [石门中学2009] 切割树

    1143. [石门中学2009] 切割树 ★   输入文件:treecut.in   输出文件:treecut.out   简单对比时间限制:1 s   内存限制:128 MB treecut 题目描 ...

  6. [SQL]存储过程建表

    create PROC [dbo].CreateUserTable ( @name NVARCHAR(60) ) AS DECLARE @a NVARCHAR(max) SET @a='create ...

  7. 数论(同余+hash)

    Time Limit:3000MS Memory Limit:65536KB Description You are given a sequence a[0]a[1] ... a[N-1] of d ...

  8. 再谈p2p投融资真相

    近来亲自调查眼下各类p2p.重度调查对象有:人人贷.陆金所.前金所.开鑫贷.礼德財富.招財宝. 投资的有几个小观念: 首先,大家投资都习惯性的细分政府背景和非政府背景.说句实话,这对一个投资人角度来讲 ...

  9. 在C 函数中保存状态:registry、reference和upvalues

    在C函数中保存状态:registry.reference和upvalues      C函数能够通过堆栈来和Lua交换数据,但有时候C函数须要在函数体的作用域之外保存某些Lua数据.那么我们想到全局变 ...

  10. _DataStructure_C_Impl:AOE网的关键路径

    //_DataStructure_C_Impl:CriticalPath #include<stdio.h> #include<stdlib.h> #include<st ...