node——进阶版服务器根据不同请求作出不同响应+响应html文件等文件
文件目录结构如下
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文件等文件的更多相关文章
- node——服务器根据不同请求作出不同响应+响应html文件等文件
在浏览器中,不同的请求应该作出不同的响应 我们可以从请求req中的url获得请求的内容 然后我们就可以通过判断请求的url来做响应 代码如下: //根据用户的不同请求,服务器做出不同的响应 // // ...
- 图解HTTP权威指南(三)| Web服务器对HTTP请求的处理和响应
作者简介 李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷.喜欢钻研底层技术,认为底层基础才是王道.一切新技术都离不开操作系统(CPU.内存.磁盘).网络 ...
- http请求报文格式和响应报文格式
转载 出处 超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议.HTTP 是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求 ...
- Node.js创建服务器和模拟客户端请求
1. 何为服务器 服务器是某种长期运行,等待请求资源的应用程序 2. 常见Web应用架构 3. 如何创建web服务器 Web服务器是使用HTTP协议,等待客户端连接后请求资源的驻守应用程序:HTTP协 ...
- Node fs, url, http 组合小型的服务器 ( 满足html请求, get, post 传值 )
<script type="text/javascript"> /* * 引入模块 */ var http = require('http'); var url = r ...
- js进阶ajax基本用法(创建对象,连接服务器,发送请求,获取服务器传过来的数据)
js进阶ajax基本用法(创建对象,连接服务器,发送请求,获取服务器传过来的数据) 一.总结 1.ajax的浏览器的window对象的XMLHtmlRequest对象的两个重要方法:open(),se ...
- python学习-- django 2.1.7 ajax 请求 进阶版
#原来版本 $.get("/add/",{'a':a,'b':b}, function(ret){ $('#result').html(ret)}) #进阶版 $.get(&qu ...
- webpack4打包nodejs项目进阶版——多页应用模板
前段时间我写了个打包nodejs项目的文章,点击前往 但是,问题很多.因为之前的项目是个历史遗留项目,重构起来可能会爆炸,当时又比较急所以就写个的适用范围很小的webpack的打包方法. 最近稍微得空 ...
- 高效能团队的Java研发规范(进阶版)
目前大部分团队是使用的阿里巴巴Java开发规范,不过在日常开发中难免遇到覆盖不到的场景,本文在阿里巴巴Java开发规范基础上,补充一些常用的规范,用于提升代码质量及增强代码可读性. 编程规约 1.基础 ...
随机推荐
- [NOIP 2010] 关押罪犯 (二分+二分图判定 || 并查集)
题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值"( ...
- [模板]Matrix Tree定理
结论:一个图的生成树个数等于它的度数矩阵减邻接矩阵得到的矩阵(基尔霍夫矩阵)的任意一个n-1阶主子式的行列式的绝对值 证明:不会 求法:高斯消元 例题:[HEOI2013]小Z的房间 #include ...
- 轻量级Java EE开发框架设计系统应用架构
首先来说一下Java EE 概述 其中常说的三大框架即是:ssh Spring:功能强大的组件粘合济,能够将你的所有的java功能模块用配置文件的方式组合起来(还让你感觉不到spring的存在)成为一 ...
- 10行Python代码实现人脸定位
10行python机器学习全卷机网,实现100+张人脸同时定位! 发表评论 1,049 游览 A+ 所属分类:未分类 收 藏 今天介绍一个快速定位人脸的深度学习算法MTCNN,全称是:Multi-t ...
- 【hihocoder 1312】搜索三·启发式搜索(普通广搜做法)
[题目链接]:http://hihocoder.com/problemset/problem/1312?sid=1092352 [题意] [题解] 从末状态的123456780开始逆向搜; 看它能到达 ...
- 【codeforces 803F】Coprime Subsequences
[题目链接]:http://codeforces.com/contest/803/problem/F [题意] 给你一个序列; 问你这个序列里面有多少个子列; 且这个子列里面的所有数字互质; [题解] ...
- Java基础学习总结(35)——Java正则表达式详解
在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包. 可粗略估计一下,除了偶尔用Linux的外,其他Linu ...
- auto-boxing, uboxing,以及缓存问题
package chengbaoDemo; public class Test02 { public static void main(String[] args) { Integ ...
- C#中的Attribute Property区别
Attribute 一般译作"特性",Property 仍然译为"属性". Attribute 是一种可由用户自由定义的修饰符(Modifier),可以用来修饰 ...
- C# 知识点集合
1.一个Visual studio软件进程只能打开一个程序集,但是一个程序集可以加载多个项目,通过程序集的添加功能可以实现. 2.F11单步调试,F10跨程序调试(一般用不到) 3.VS如何快速的切换 ...