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.基础 ...
随机推荐
- 基于fullpage的自动播放,手动播放,暂停页面的功能
功能如下: 1.默认加载方式为“自动播放 ”方式,即从第1屏至第5屏 页面循环加载显示,每屏每次仅显示1个页面,页面间停留时间为“10”秒2.手动播放过程中,按数字键“1”-“5”,将直接切到指定页面 ...
- Codeforces Round #468 (Div. 2, based on Technocup 2018 Final Round)A. Friends Meeting
Two friends are on the coordinate axis Ox in points with integer coordinates. One of them is in the ...
- Project Euler 8 Largest product in a series
题意:寻找这 1000 个数中相邻 13 个数相乘积最大的值 思路:首先想到的是暴力,但是还可以利用之前记录过的数值,什么意思呢?即在计算 2 - 14 后,再计算 3 - 15 时完全可以利用之前计 ...
- sessionStorage与clone方法在项目中的应用
//资料列表: //JSON.parse(jsonstr); //json格式字符串转换成json对象 //JSON.stringify(jsonobj); //json对象转换成json格式字符串 ...
- Mysql 忘记数据库密码
windows下忘记MySQL密码的修改方法 1.关闭正在运行的Mysql服务: A.命令下运行 net stop mysql B.找到mysql服务停止mysql的服务 C.在任务管理器中结束M ...
- hibernate在maven中自动生成
1.构建数据库连接 2.新建maven项目,利用工具生成hibernate相应的类和xml文件 新建pojo包 右击项目 点击Configure Facets 选择hibernate 选择包 选择驱动 ...
- 新人--使用layui做的表格,复杂表头,固定列,操作单元格数据计算,点击查询重载表格,可以选择部分或者全部导出
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Django用户认证(四)自定义认证Customizing authentication
原文:https://www.cnblogs.com/linxiyue/p/4061044.html 扩展已有的用户模型Extending the existing User model 有两种方法来 ...
- google浏览器中 查看记住的账号和密码
对于一个有“健忘症”的人来说,密码形同虚设..设置了就忘记,每次登陆都要重新设置密码... 然后,无意中发现,谷歌浏览器点过一次记住密码后,竟然可以明文查看账号和密码!! 步骤: 1.打开谷歌浏览器, ...
- SpringBoot 国际化
一.配置文件 二.application.properties 文件( 让国际化的文件被 SpringBoot 识别 ) spring.messages.basename=i18n.login 三.h ...