目录:
一、构建http服务程序-根据不同请求做出不同响应
二、根据用户不同请求,读取不同HTML文件响应
三、响应的HTML文件中包含图片的处理方式
四、根据后缀查询MIME类型
五、案例:不同url请求不同html页面,页面包含图片、样式css等静态资源
六、request对象
七、response对象常用成员(API)

一、构建http服务程序-根据不同请求做出不同响应    <--返回目录

// 加载http模块
var http = require("http"); // 创建一个http服务对象
http.createServer(function(req, res) {
if(req.url === '/') {
res.end("hello index");
} else if(req.url === '/list') {
res.end("hello list");
} else {
res.end("404,not found!");
}
}).listen('8080', function() {
console.log('服务器已经启动。');
});

二、根据用户不同请求,读取不同HTML文件响应    <--返回目录

  第一步:在D:/hello.js中写代码:

// 加载http模块
var http = require("http");
var fs = require("fs");
var path = require("path"); // 创建一个http服务对象
http.createServer(function(req, res) {
if(req.url === '/') {
fs.readFile(path.join(__dirname, 'pages/index.html'), function(err, data) {
if(err) throw err;
res.end(data);
});
} else if(req.url === '/list') {
fs.readFile(path.join(__dirname, 'pages/list.html'), function(err, data) {
if(err) throw err;
res.end(data);
});
} else {
res.end("404,not found!");
}
}).listen('8080',function() {
console.log('服务器已经启动。');
});

  第二步:在d盘下创建pages文件夹,在pages文件夹中添加index.html文件和list.html文件

  index.html(list.html把index替换成list)

<!DOCTYPE html>
<html>
<head>
<title>index页面</title>
<meta charset="utf-8">
</head>
<body>
<h2>index页面</h2>
</body>
</html>

  

  第三步:浏览器访问:http://localhost:8080/list

三、响应的HTML文件中包含图片的处理方式    <--返回目录

  第一步:在D:/hello.js中写代码:

// 加载http模块
var http = require("http");
var fs = require("fs");
var path = require("path"); // 创建一个http服务对象
http.createServer(function(req,res) {
if(req.url === '/') {
fs.readFile(path.join(__dirname, 'pages/index.html'), function(err, data) {
if(err) throw err;
res.end(data);
});
} else if(req.url === '/list') {
fs.readFile(path.join(__dirname, 'pages/list.html'), function(err, data) {
if(err) throw err;
res.end(data);
});
} else if(req.url.includes('.jpg')){
fs.readFile(path.join(__dirname, 'images', req.url), function(err, data) {
if(err) throw err;
res.end(data);
});
} else {
res.end("404,not found!");
}
}).listen('8080',function() {
console.log('服务器已经启动。');
});

  第二步:在d盘下创建pages文件夹,在pages文件夹中添加index.html文件和list.html文件

  index.html文件

<!DOCTYPE html>
<html>
<head>
<title>index页面</title>
<meta charset="utf-8">
</head>
<body>
<h2>index页面</h2>
<img src="/1.jpg">
</body>
</html>

  第三步:在d盘下创建images文件夹,在images文件夹中添加1.jpg文件

  第四步:浏览器访问:http://localhost:8080

四、根据后缀查询MIME类型    <--返回目录

  请求的静态资源可能是图片,可能是css等等,图片后缀可能是jpg,可能是png等等。为了写出通用的程序,可以使用第三方模块mime。

  使用第三方模块mime:

// 根据请求后缀,来决定返回数据的MIME类型
var mime = require("mime");
res.setHeader('Content-Type', mime.getType(req.url));

五、案例:不同url请求不同html页面,页面包含图片、样式css等静态资源    <--返回目录

  项目结构:

  

  在项目根目录node-hello下,执行npm install mime命令,下载安装mime模块;安装完后会在node-hello目录下创建node_modules目录。

  app.js

// 加载http模块
var http = require("http");
var fs = require("fs");
var path = require("path");
var mime = require("mime"); // 创建一个http服务对象
http.createServer(function(req,res) {
if(req.url === '/') {
fs.readFile(path.join(__dirname, 'pages/index.html'), function(err, data) {
if(err) throw err;
res.end(data);
});
} else if(req.url === '/list') {
fs.readFile(path.join(__dirname, 'pages/list.html'), function(err, data) {
if(err) throw err;
res.end(data);
});
} else if(req.url.includes('static')){
fs.readFile(path.join(__dirname, req.url), function(err, data) {
if(err) {
         res.end("文件不存在!");
         return;
       }
res.setHeader('Content-Type', mime.getType(req.url));
res.end(data);
});
} else {
res.end("404,not found!");
}
}).listen('8080',function() {
console.log('服务器已经启动。');
});

  index.html

<!DOCTYPE html>
<html>
<head>
<title>index页面</title>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="/static/css/common.css">
</head>
<body>
<h2>index页面</h2>
<img src="/static/images/1.jpg">
<img src="/static/images/2.png">
</body>
</html>

  请求静态资源时,响应信息:

  如果不使用mime,并且将res.setHeader('Content-Type', mime.getType(req.url));注释掉,其实静态资源也能正常处理。

六、request对象    <--返回目录

  1)request对象类型http.IncomingMessage,继承自stream.Readable;

  2)request对象常用成员
          - request.headers  获取所有的请求报文头,返回一个对象{'host':'localhost:8080', 'Connection':'keep-alive', ...}
          - request.rawHeaders  获取所有的请求报文头,返回一个数组 ['host','localhost:8080','Connection','keep-alive', ...]
          - request.httpVersion  获取客户端使用的http版本
          - request.method   请求是get还是post
          - request.url

七、response对象常用成员(API)    <--返回目录

  1) response.write('数据',['数据编码'],[fn]);
  2) response.end();//结束响应
    
  3) response.end([data], [encoding], [callback]);
    - 该方法中如果指定了data,则相当于调用response.write(data,encoding)之后再调用response.end(callback)
    
  4) response.setHeader('','');//在响应内容前设置,设置响应报文头
    
  5) 设置http响应状态码和对应的消息
    response.statusCode=404
    response.statusMessage='Not Found';
    
  6) response.writeHead() 直接向客户端写入http响应报文头
     response.writeHead(404,'Not Found', {'Content-Type':'text/html;charset=utf-8'})

node.js入门学习(二)MIME模块,request和response对象,demo之不同url请求不同html页面,页面包含图片、样式css等静态资源的更多相关文章

  1. Node.js入门学习笔记(一)

    先来个最常见的"Hello World!". 打开你最喜欢的编辑器(我用的是Sublime Text),创建一个helloWorld.js的文件.我们要做的就是向stdout输出& ...

  2. node.js入门学习笔记整理

    (1)node Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node与javaScript的区别在于,javaScript的顶层对象是window,而no ...

  3. node.js入门学习(一)环境安装,REPL,fs模块,path模块,http模块

    一.node.js介绍 1.1.node.js是什么 官网首页总结:Node.js® 是一个基于 Chrome V8 引擎 的 JavaScript 运行时. 1)node.js是一个开发平台,就像j ...

  4. node.js入门学习(四)--Demo图书的增删改查

    需求:图书的增删改查,图书数据保存在data.json文件中. 1.Demo结构: 2.首先下载安装node.js,配置环境变量:参考博客 3.项目初始化 1)创建项目根目录node-hello,进入 ...

  5. 手把手教你学node.js之学习使用外部模块

    学习使用外部模块 目标 建立一个 lesson2 项目,在其中编写代码. 当在浏览器中访问 http://localhost:3000/?q=alsotang 时,输出 alsotang 的 md5 ...

  6. node.js入门学习(五)--Demo模块化改造

    1.node.js中模块的分类 1)node.js内置模块(核心,原生) 所有内置模块在安装node.js时就已经编译成二进制文件,可以直接加载运行(速度较快),部分内置模块,在node.exe这个进 ...

  7. node.js入门学习(三)--npm

    一.npm介绍 1)npm:node package manager是node.js默认的以js编写的软件包管理系统 官网:www.npmjs.com 文档:docs.npmjs.com 2)提到np ...

  8. Node.js基础学习二之POST请求

    本篇介绍下 Node.js post 请求 需求: 用户登录,前端界面输入用户名和密码,点击登录请求后台验证,根据后台反馈的信息做出响应 前端: (1)使用form表单 (2)使用ajax异步请求 服 ...

  9. Node.js入门学习笔记(三)

    基于事件驱动的回调 这个问题不好回答,不过这是Node.js原生的工作方式.它是事件驱动的,这也是它为什么这么快的原因.你可以花一点时间阅读一下Felix Geisendörfer的大作 Unders ...

随机推荐

  1. TCP端口扫描

    # TCP三次握手 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认: 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1 ...

  2. CDH开启ldap

    参考: 官网ldap: https://www.cloudera.com/documentation/enterprise/6/6.2/topics/cm_sg_ldap_grp_mappings.h ...

  3. POJ - 1287 Networking (最小生成树&并查集

    You are assigned to design network connections between certain points in a wide area. You are given ...

  4. Luogu P3647 [APIO2014]连珠线

    题目 换根dp. 显然对于给定的一棵有根树,蓝线都不能拐弯. 设\(f_{u,0}\)表示\(u\)不是蓝线中点时子树内的答案,\(f_{u,1}\)表示\(u\)是蓝线中点时子树内的答案.(以\(1 ...

  5. [CF750G] New Year and Binary Tree Paths

    目录 简单的 组合的 题目链接 简单的 设从节点\(x\)开始不断往左儿子走h-1步,则编号和为\(x\sum_{i=0}^{h-1}2^i=x(2^h-1)\). 若倒数第\(i\)步走向的是右儿子 ...

  6. javaweb: request.getParameter()、request.setAttribute()与request.getAttribute()的作用 (转)

    出处:https://blog.csdn.net/qq_41937388/article/details/87972914 1.request.getParameter()方法是获取通过类似post, ...

  7. Git-版本控制 (三)

    前面两篇我们成功安装了Git,并且成功创建了我们的版本库. 创建了版本库,怎么可以不往里面放内容呢,所以今天的任务就是学会将文件放入至我们的版本库中...... 首先,我们点开我们的"Git ...

  8. json格式和对象类型的转换20170330

    (1)对象的类型转换成字符串类型(或者更确切的说是json类型的) JSONObject jo = JSONObject.fromObject(map);常见的java代码转换成json 比如:后台J ...

  9. 服务器配置好但Idea/Datagrip无法连接远程数据库的解决方案

    服务器没有开放端口3306,在云服务控制台配置安全组即可.

  10. vue-awesome-swiper轮播插件

    1. github上搜索vue-awesome-swiper 2. readme中有安装方法,建议在插件名后@版本号,使用稳定的老版本 npm install vue-awesome-swiper@x ...