文件目录结构如下

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. 小白学习Spark系列二:spark应用打包傻瓜式教程(IntelliJ+maven 和 pycharm+jar)

    在做spark项目时,我们常常面临如何在本地将其打包,上传至装有spark服务器上运行的问题.下面是我在项目中尝试的两种方案,也踩了不少坑,两者相比,方案一比较简单,本博客提供的jar包适用于spar ...

  2. 训练1-N

    给出N个整数,对着N个整数进行排序 Input 第1行:整数的数量N(1 <= N <= 50000)第2 - N + 1行:待排序的整数(-10^9 <= Ai <= 10^ ...

  3. 训练1-U

    输入2个正整数A,B,求A与B的最小公倍数. Input 2个数A,B,中间用空格隔开.(1<= A,B <= 10^9) Output 输出A与B的最小公倍数. Sample Input ...

  4. nyoj286-动物统计

    动物统计 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 在美丽大兴安岭原始森林中存在数量繁多的物种,在勘察员带来的各种动物资料中有未统计数量的原始动物的名单.科学家想判 ...

  5. ASP.NET--identity笔记及截图

    aspnetUsers aspnetRoles aspnetUserroles aspnetUserClaims 存储用户user额外信息的键值对 aspnetUserLogins 第三方登陆的控件 ...

  6. nodejs-安装及卸载

    linux下安装node 1.编译的方式安装​ 1 2 3 4 5 6 7 wget http://nodejs.org/dist/node-latest.tar.gz tar zxvf node-l ...

  7. Vijos——T 1016 北京2008的挂钟 || 洛谷—— P1213 时钟

    https://www.luogu.org/problem/show?pid=1213 题目描述 考虑将如此安排在一个 3 x 3 行列中的九个时钟: 目标要找一个最小的移动顺序将所有的指针指向12点 ...

  8. [Windows Server]新机子上装老系统·

    硬盘模式改了也得用U大师,然后再PE里装 1.U大师做启动盘 2.拷贝解压后的系统进去 3.用PE自带安装工具

  9. muduo总结

    总结说的有的过大,算是对自己学习的一个总结.兴许会不断补充. 模型总结 muduo是基于非堵塞的IO和事件驱动的网络库. muduo的总体结构时one loop per thread+threadpo ...

  10. Codeforces 570D TREE REQUESTS dfs序+树状数组

    链接 题解链接:点击打开链接 题意: 给定n个点的树.m个询问 以下n-1个数给出每一个点的父节点,1是root 每一个点有一个字母 以下n个小写字母给出每一个点的字母. 以下m行给出询问: 询问形如 ...