文件目录结构如下

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. js中标签字符串的拼接

    //1.用单双引号拼接 var valueDemo = "111"; var htmlStrs1 = '<option selected="selected&quo ...

  2. Alios-Things的学习与使用(1)

    目录 Alios-Things的学习与使用 1.简介 1.1 为什么要学alios-Things 2. 环境搭建 2.1 使用docker toolbox安装docker 2.2 测试使用dockde ...

  3. mysql进阶练习

    一 .  MySQL进阶练习 /*==========================创建班级表=============================*/ CREATE TABLE class ( ...

  4. C++基础 (8) 第八天 数组指针 模板指针 C语言中的多态 模板函数

    1昨日回顾 2 多态的练习-圆的图形 3多态的练习-程序员薪资 4员工管理案例-抽象类和技术员工的实现 employee.h: employee.cpp: technician.h: technici ...

  5. immutable-js基础

    Immutable.js(和原生方法不同): 用于深层次的数组和对象的比较   数据结构:Map Set Seq List Rang(和原生不同)   首先:先忘记es5 es6的数组对象方法   官 ...

  6. Django入门--创建项目及应用

    Django是用于后台处理的web应用框架.用户通过浏览器输入网址,向http服务器发起访问网页的请求,http服务器(Apache/Nginx)接收到用户请求后,把请求发送给web应用框架进行处理, ...

  7. Spring环境搭建及简单demo

    1. Spring框架简介(以下这段话可用于面试求职) Spring为JavaEE开发提供了一个轻量级的解决方案,主要表现为, IOC(或者叫做DI)的核心机制,提供了bean工厂(Spring容器) ...

  8. springmvc中配置拦截器

    -------------------------------------------- 登陆controller方法 @Controller public class LoginController ...

  9. [Beginning SharePoint Designer 2010]探索SharePoint Designer

    本章概要: 1.SharePoint Designer是如何进入到微软的工具集中去的 2.SharePoint Designer的基本特性 3.如何创建SharePoint站点 4.如何打开一个已经存 ...

  10. FastDFS原理系列文章

    FastDFS原理系列文章 基于FastDFS 5.03/5.04 2014-12-19 一.概述 FastDFS文档极少,仅仅能找到一些宽泛的架构文档,以及ChinaUnix论坛上作者对网友提问的一 ...