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

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

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

代码如下:

//根据用户的不同请求,服务器做出不同的响应
//
//1.加载http模块
//
var http=require('http'); //2.创建http服务,监听
http.createServer(function(req,res){
//获取用户请求req.url
//console.log(req.url);
//结束响应
//res.end();
res.setHeader('Content-Type','text/plain;charset=utf-8');
//通过req.url获取用户请求的路径,获得不同的响应
if(req.url==='/'||req.url==='/index')
res.end('hello index');
else if(req.url==='/login')
res.end('hello login');
else if(req.url==='/list')
res.end('hello list');
else
res.end('404'); }).listen(8080,function(){
console.log('http://localhost:8080'); })

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

代码如下

//根据用户请求不同,响应不同的html
var http=require('http');
//加载fs模块
var fs=require('fs');
//加载path模块
var path=require('path'); http.createServer(function(req,res){ if(req.url==='/'||req.url==='/index')
{
//如果这里传utf-8,返回的data是字符串,但我们不需要将其转为字符串。因为我们读取的是二进制,我们不需要将二进制转为字符串再将字符串转为二进制
fs.readFile(path.join(__dirname,'html','xx1.html'),function(err,data){
if(err)
{
console.log(err);
}
//把读取的html发送
res.end(data);//这里面不会乱码,因为html文件了已经有utf-8了
})
}
else if(req.url==='/login')
{
fs.readFile(path.join(__dirname,'html','xx2.html'),function(err,data){
if(err)
{
console.log(err);
}
//把读取的html发送
res.end(data);//这里面不会乱码,因为html文件了已经有utf-8了
})
}
else if(res.url==='/list')
{
fs.readFile(path.join(__dirname,'html','xx3.html'),function(err,data){
if(err)
{
console.log(err);
}
//把读取的html发送
res.end(data);//这里面不会乱码,因为html文件了已经有utf-8了
})
}
else
res.end('404'); }).listen(9090,function(){
console.log('http://localhost:9090');
})

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

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<img src="../pic/1.png" /> </body>
</html>

这样是解析不了图片的

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

else if(req.url==='/pic/1.png')//要单独请求图片
{
fs.readFile(path.join(__dirname,'pic','1.png'),function(err,data){
if(err)
{
console.log(err);
}
res.setHeader('Content-Type','image/png');//要加请求头 res.end(data);
})
}

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

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

其中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. bzoj 1189: [HNOI2007]紧急疏散evacuate 分层图最大流_拆点_二分

    Description 发生了火警,所有人员需要紧急疏散!假设每个房间是一个N M的矩形区域.每个格子如果是'.',那么表示这是一 块空地:如果是'X',那么表示这是一面墙,如果是'D',那么表示这是 ...

  2. 使用Spring Initializer快速创建Spring Boot项目

    目录结构 IDE都支持使用Spring的项目创建向导快速创建一个Spring Boot项目:选择我们需要的模块:向导会联网创建Spring Boot项目:默认生成的Spring Boot项目: 主程序 ...

  3. C++ "#"的作用和用法

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/48879093 1 #和##的作用和用法 ...

  4. 洛谷—— P2668 斗地主

    https://www.luogu.org/problem/show?pid=2668 题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54 ...

  5. chrome隐身模式无法播放flash的解决办法

    困扰很多天的chrome无法播放flash的问题终于解决了 因为之前一直用隐身模式,一直不能播放flash,重装chrome,重装插件,还是不行 结果今天发现正常模式是可以播放的,所以找了一下chro ...

  6. jdk环境变量设置理解

    1.系统变量→新建 JAVA_HOME 变量 . 变量值填写jdk的安装目录(本人是 E:\Java\jdk1.7.0) 2.系统变量→寻找 Path 变量→编辑 在变量值最后输入 %JAVA_HOM ...

  7. BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第11章节--为Office和SP解决方式开发集成Apps 集成SP和Office App

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第11章节--为Office和SP解决方式开发集成Apps  集成SP和Office App         你能够用两种 ...

  8. 一起talk C栗子吧(第一百一十九回:C语言实例--线程死锁三)

    各位看官们.大家好,上一回中咱们说的是线程死锁的样例,这一回咱们继续说该样例.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,由于篇幅的原因我们在上一回仅仅介绍了死锁发生的第一种原因,今天 ...

  9. HIbernate中openSession和getCurrentSession

      这两者的差别网上非常多资源,我这里就copy一下了,然后有点问题的是今天遇到的问题.   openSession和getCurrentSession的根本差别在于有没有绑定当前线程,所以,用法有差 ...

  10. 精美viso制图(1)

    office组件中的viso是一款十分强大的绘图工具,在绘制流程图.结构框图时显得十分方便,这里将我自己绘制的一些viso图(大部分都是用在我自己的论文中的)与大家分享一把. 1.深度学习训练流程图 ...