文件目录结构如下

resource文件里面放了css文件和图片等,view文件里面是html文件

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="../resource/css1.css">
<title>首页</title>
</head>
<body>
<p class="index">this is index</p> </body>
</html>

html都是如此简单的文件

工具不同请求响应文件的代码如果每个请求都要写一个单独的响应过于繁琐,很不方便,我们可以通过封装函数的方法来进行优化,我们还可以将函数挂载到respones上,形成一个闭包

代码:

res.render=function(filename){
fs.readFile(filename,function(err,data){
if(err)
{
res.writeHead(404,'Not Found',{'Content-Type':'text/html;charset=utf-8'});
res.end('404,not found');
} res.setHeader('Content-Type',mime.getType(filename));
console.log(req.url);
console.log(mime.getType(filename));
res.end(data);
})
}

总代码

//设计路由:当用户用什么样的方式,访问什么样的路径,我们应作出什么样的响应
//这是当前项目的入口文件
//创建package.json:npm init -y
//
//将render函数挂载到res对象上,可以通过res.render()来实现 //1.加载http文件
var http=require('http');
var fs=require('fs');
var path=require('path');
var mime=require('mime'); //2.创建服务
http.createServer(function(req,res){
//为res添加一个render函数,方便后续使用
res.render=function(filename){
fs.readFile(filename,function(err,data){
if(err)
{
res.writeHead(404,'Not Found',{'Content-Type':'text/html;charset=utf-8'});
res.end('404,not found');
} res.setHeader('Content-Type',mime.getType(filename));
console.log(req.url);
console.log(mime.getType(filename));
res.end(data);
})
} //这里会有大量的代码
//设计路由
//当用户请求/或/index的时候,显示新闻列表-get请求
//当用户请求/item时显示新闻详情-get请求
//当用户请求/submit时,显示添加新闻页-get请求
//当用户请求/add时,将用户提交的新闻保存到data.json文件中-get请求
//当用户请求/add时,将用户提交的新闻保存到data.json文件中-post请求 req.url=req.url.toLowerCase();//将请求内容转为小写
req.method=req.method.toLowerCase();
//先根据用户请求的路由,将对应的html显示出来
if(req.url==='/'||req.url==='/index'&&req.method==='get')
{
res.render(path.join(__dirname,'views','home.html')); }else if(req.url==='/submit'&&req.method==='get'){ res.render(path.join(__dirname,'views','submit.html')); }else if(req.url==='/item'&&req.method==='get'){ }else if(req.url==='/add'&&req.method==='get'){ res.render(path.join(__dirname,'views','add.html')); }else if(req.url==='/add'&&req.method==='post'){ res.render(path.join(__dirname,'views','add.html'));
}else if(req.url.startsWith('/resource')&&req.method==='get'){
//如果用户请求以/resources开头,并且是get请求,就认为用户是要请求静态资源 res.render(path.join(__dirname,req.url)); }
else{
res.writeHead(404,'NOT FOUND',{
'Content-Type':'text/plain;charset=utf-8'
});
res.end('404,page not found');
}
}).listen(9090,function(){
console.log('http://localhost:9090');
})

这样在访问不同路径时,会得到不同的html

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

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

    在浏览器中,不同的请求应该作出不同的响应 我们可以从请求req中的url获得请求的内容 然后我们就可以通过判断请求的url来做响应 代码如下: //根据用户的不同请求,服务器做出不同的响应 // // ...

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

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

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

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

  4. Node.js创建服务器和模拟客户端请求

    1. 何为服务器 服务器是某种长期运行,等待请求资源的应用程序 2. 常见Web应用架构 3. 如何创建web服务器 Web服务器是使用HTTP协议,等待客户端连接后请求资源的驻守应用程序:HTTP协 ...

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

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

  6. js进阶ajax基本用法(创建对象,连接服务器,发送请求,获取服务器传过来的数据)

    js进阶ajax基本用法(创建对象,连接服务器,发送请求,获取服务器传过来的数据) 一.总结 1.ajax的浏览器的window对象的XMLHtmlRequest对象的两个重要方法:open(),se ...

  7. python学习-- django 2.1.7 ajax 请求 进阶版

    #原来版本 $.get("/add/",{'a':a,'b':b}, function(ret){ $('#result').html(ret)}) #进阶版  $.get(&qu ...

  8. webpack4打包nodejs项目进阶版——多页应用模板

    前段时间我写了个打包nodejs项目的文章,点击前往 但是,问题很多.因为之前的项目是个历史遗留项目,重构起来可能会爆炸,当时又比较急所以就写个的适用范围很小的webpack的打包方法. 最近稍微得空 ...

  9. 高效能团队的Java研发规范(进阶版)

    目前大部分团队是使用的阿里巴巴Java开发规范,不过在日常开发中难免遇到覆盖不到的场景,本文在阿里巴巴Java开发规范基础上,补充一些常用的规范,用于提升代码质量及增强代码可读性. 编程规约 1.基础 ...

随机推荐

  1. echarts示例

    将做过的echarts图表通过示例形式展示,便于以后使用,基于vue ,echarts,leancloud实现 github源码地址:https://github.com/707293891/echa ...

  2. Day 10 函数

    函数 1.什么是函数? 函数就是具备某一功能的工具,事先将工具准备好就是函数的定义,遇到应用场景拿来就用就是函数的调用 2.为何用函数? 如果不使用函数,写程序会遇到这三个问题 1.程序冗长 2.程序 ...

  3. Linux的mysql搭建

    1.centos7默认安装mariadb数据库 #yum  remove mariadb* 2.wget mysql数据库地址  如果是普通用户,请提权  sudo提权 3.yum local ins ...

  4. CSS - display:inline-block 相邻元素间有4px的空白间距

    取消“display:inline-block 相邻元素间有4px的空白间距” Demo:http://jsfiddle.net/JSDavi/p6gcx6nx/ 例子: <div sytle= ...

  5. PHP开发实战权威指南-读书总结

    从今年开始,断断续续学习PHP已经有4个月了.最初,认真学习PHP几天,就弄WordPress搭建了一个个人博客,这也符合技术人的实践理念. 最近,重温PHP开发实战权威指南,做点总结,整理下自己学习 ...

  6. 查看eclipse的安装路径

    在桌面上快捷方式右键  点击属性  起始位置便是.

  7. C/C++ 获取文件夹下的所有文件列表

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51009608 提供一段C/C++代码示 ...

  8. idea debug打得断点第一次可以进入,第二次不能进入

  9. [ASP.NET]EF选一个空表的情况

    public List<DAL.StuFillAnswers> FillsToCheck(int sid,int eid) { using (DAL.ExamSysEntities db ...

  10. 【SSH2框架(理论篇)】--SSH2 Vs 经典三层

     这几天一直在学习使用SSH2框架.对于框架本身的使用并非非常困难.相信经过多锻炼就行熟练的掌握框架的使用,让我匪夷所思的是在使用框架的时候感觉非常熟悉,好像在哪里用过似得. 就在某次查看代码的时 ...