nodeJS从入门到进阶二(网络部分)
一、网络服务器
1、http状态码
1xx: 表示普通请求,没有特殊含义
2xx:请求成功
- 200:请求成功
3xx:表示重定向
- 301 永久重定向
- 302 临时重定向
- 303 使用缓存(服务器没有更新过)
4xx:无法访问
- 403:无法访问
- 404:资源找不到
5xx:服务器有错
- 500:服务器代码有错
- 502:网关或代理服务器出错
- 503:服务器已崩溃
状态码使用
res.writeHead('状态码','响应头对象')
2、响应头
响应头:
- Content-Type:响应的文件类型(MIME类型)
- 注意:未指定响应文件内容是,默认是html;编码格式默认是系统编码
- Content-Length: 响应内容的长度 (数字)
- Access-Control-Allow-Oragin:"*" //设置跨域
设置响应头
{
'Content-Type':'text/html;charset=utf-8'
}
3、MIME类型:
什么是MIME类型?
- Multipurpose Internet Mail Extensions多用途互联网邮件扩展类型
- 可以认为是文件类型的表述
常用的MIME类型有哪些?
- .txt-------------text/plain
- .html-------------text/html
- .css-------------text/css
- .js-------------text/javascript
- .png-------------image/png
- .jpg-------------image/jpeg
- .gif-------------image/gif
- .json-------------text/json 以前 application/json
- .xml-------------text/xml
- .pdf-------------application/pdf
- .zip-------------application/x-gzif
- .mp3-------------audio/mpeg
- .mp4-------------video/mpeg
4、制作静态网页服务器
使用nodeJS搭建一个最基本的服务器
var http = require('http');
var path = require('path');
var server = http.creareServer();
server.on('request',function(req,res){
//配置访问不同的url
if(req.url==='/'){
//根据请求文件的后缀通过path模块得到,可以设置不同的MIME类型
res.writeHead(200,{
"content-Type":"text/html;charset=utf-8;"
})
res.write('<h1>响应内容<h2>')
res.end();
}
})
server.listen(80,function(){
console.log('server is running.....');
})
5、接收get和post方式的传值
get方式客户端同过url传值
- nodeJS接收使用req.url取值
post方式客户端通过表单传值
- nodeJS接收使用获取流的方式取值
req.on('data',(a)=>{
//定义传过来的数据
let query ='';
query+=a;
})
req.on('end',()=>{
//完成
res.write('<h1>传递的参数为:'+query+'</h1>');
res.end();
})
二、express框架
1、express介绍
express是一个基于node.js 的极简、灵活的web应用开发框架,可以实现强大的web服务器功能
Express 框架核心特性:
- 可以设置中间件响应或过滤http请求
- 可以使用路由实现动态网页,响应不同的http请求
- 内置支持ejs模板(默认是jade模板),实现模板渲染生成html
express-generator生成器
- 是express官方团队为开发者准备的一个快速生成工具,可以快速的生成一个基本的express开发
2、express安装
安装express-generator生成器
- cnpm i -g express-generator //安装完成后可以使用express命令
- express -e 项目名称 //创建项目 (e表示使用ejs模板)
- express -e //手动创建项目
- cnpm i //安装依赖
- 启动项目
- node app //需要手动添加监听端口的代码
- npm start //自动查找node ./bin/www
- node ./bin/www //开启项目
- localhost:3000 //测试项目
安装nodemon插件
由于项目每次修改内容,需要重新启动项目,非常麻烦,借助第三方模块实现不用重启也能自动更新的效果
- npm i -g nodemon //安装到全局
- npm i -D nodemon //安装到当前项目
- 使用:把node 替换为 nodemon 执行js文件
目录说明
- bin 可执行文件目录
- node_modules 依赖包目录
- public 静态文件根目录
- 所有金泰文件都放在这个目录下html,css,js,图片,字体,视屏等资源
- routes 路由模块目录,动态文件的目录
- 优先找静态文件,如果没有静态存在则找动态路由,如果没有,就404(根据app.js中间件条用顺序而来)
- views 视图目录,用来存放所有ejs模板
文件
- app.js 项目的主文件,对整个项目的所有资源进行统筹的安排
- package.json 项目的描述文件,声明项目名称,版本,依赖等
3、express路由(重要)
- 接收用户请求,处理用户数据,返回结果给用户的一套程序,可以理解为生成动态网页的程序
- 后端路由的核心:URL
express的路由
express对象自带有一个Router类,可以实例化出路由对象,可以在改对象上挂载非常多的路由节点,写法如下:
创建一个独立的路由模块
- 需求:创建一个vip路由模块,接收vip目录下的所有需求,响应数据
- 1)在routes目录下创建一个vip.js的路由模块
- 2)编写路由模块代码
var express = require('express'); //引入express模块
var router = express.Router();//实例化路由对象 //编写路由挂在到路由对象上
router.get('/list.html',function(req,res){
res.send('数据');
}) module.exports = router; //暴露路由对象
- 3)将编写好的路由模块引入到主模块app.js中,由主模块分配对应的请求到该模块去处理
var vip = require("./routes/vip.js");//引入vip路由模块
app.use("/vip",vip);//分配vip目录下的请求给vip路由去处理
路由的区分
- 大路由(总路由):app.js 负责接所有请求,对请求进行分配
- 小路由(分路由):/routes下面的所有路由模块,只负责处理自己管理的目录下的请求
4、express响应对象(res)
- 响应对象是服务器向客户端响应数据的对象,包含了所有要响应的内容
响应对象的方法
- res.send();//【重点】返回任意类型的数据给客户端,有以下注意事项:
- 如果返回一个数字,会当成是状态码,会报错
- send方法只能出现一次,重复无效,并且会报错
- 设置状态码并返回内容,支持链式调用
res.status(200).send('任意内容')
- res.json(); //返回JSON数据,自动设置响应头
- res.render(); //【重点】模板渲染,自动拼接数据,发给浏览器
res.render('模板名称','模板数据')
- res.redirect('目标');重定向,可以实现跳转
- res.set(); //【重点】设置响应头
5、express请求对象(req)
客户端向服务端发送数据的对象,包含请求头和请求体
接收get方式的传值
- 语法:req.query.参数名
接收post方式的传值
- 语法:req.body.参数名
匹配URL网址上的数据(匹配模式)
- 在接请求的地方去匹配,在通过语法进行接收,实现伪静态
- 语法:req.params.参数名
6、中间件
什么是中间件?
是一个函数,位于客户端和路由之间,可以访问请求对象和响应对象,也可以调起下一个中间件
自定义中间件
app.use(function(request, response, next) {
// 对request和response作出相应操作
// 操作完毕后返回next()即可转入下個中间件
next();
})
伪函数 next()
- 如果中间件不调用next()函数,整个请求响应流程中止,不在向后执行
- 调用函数相当于调用下一个中间件,执行完以后自己的函数继续执行
nodeJS从入门到进阶二(网络部分)的更多相关文章
- nodeJS从入门到进阶三(MongoDB数据库)
一.MongoDB数据库 1.概念 数据库(DataBase)是一个按照数据结构进行数据的组织,管理,存放数据的仓库. 2.关系型数据库 按照关系模型存储的数据库,数据与数据之间的关系非常密切,可以实 ...
- nodeJS从入门到进阶一(基础部分)
一.Node.js基础知识 1.概念 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是JavaScript的运行环境 Node.js 使用了一个事件驱动.非阻塞 ...
- Wireshark入门与进阶系列(二)
摘自http://blog.csdn.net/howeverpf/article/details/40743705 Wireshark入门与进阶系列(二) “君子生非异也,善假于物也”---荀子 本文 ...
- Weex入门与进阶指南
Weex入门与进阶指南 标签: WeexiOSNative 2016-07-08 18:22 59586人阅读 评论(8) 收藏 举报 本文章已收录于: iOS知识库 分类: iOS(87) 职 ...
- Docker入门教程(二)命令
Docker入门教程(二)命令 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第二篇,介绍了Docker的基本命令以及命令的用法和功能. 在Docker ...
- SQL Server 扩展事件(Extented Events)从入门到进阶(4)——扩展事件引擎——基本概念
本文属于 SQL Server 扩展事件(Extented Events)从入门到进阶 系列 在第一二节中,我们创建了一些简单的.类似典型SQL Trace的扩展事件会话.在此过程中,介绍了很多扩展事 ...
- Python 简单入门指北(二)
Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...
- 《AngularJS入门与进阶》图书简介
一.图书封面 二.图书CIP信息 图书在版编目(CIP)数据 AngularJS入门与进阶 / 江荣波著. – 北京 : 清华大学出版社, 2017 ISBN 978-7-302-46074-9 Ⅰ. ...
- 免费的 Vue.js 入门与进阶视频教程
这是我免费发布的高质量超清「Vue.js 入门与进阶视频教程」. 全网最好的.免费的 Vue.js 视频教程,课程基于 Vue.js 2.0,由浅入深,最后结合实际的项目进行了最棒的技术点讲解,此课程 ...
随机推荐
- MyBatis(八):Mybatis Java API枚举类型转化的用法
最近工作中用到了mybatis的Java API方式进行开发,顺便也整理下该功能的用法,接下来会针对基本部分进行学习: 1)Java API处理一对多.多对一的用法: 2)增.删.改.查的用法: 3) ...
- Centos 7.x卸载ibus黑屏修复及fcitx搜狗拼音安装方法
ibus黑屏修复 百度出来的fcitx安装方法,都要卸载ibus,如果没有注意同时卸载掉的依赖包的话,gnome桌面中的一些关键库也没被卸载. 修复方法很简单,重新安装Gnome sudo yum - ...
- Linux的tmpfs和ramfs
tmpfs tmpfs是一种虚拟内存文件系统, 它的存储空间在VM里面,现在大多数操作系统都采用了虚拟内存管理机制, VM(Virtual Memory) 是由Linux内核里面的VM子系统管理. V ...
- vue---props进行双向数据绑定报错
在使用vue进行组件开发的时候,遇到一个问题,父组件传递到子组件里面的值,如果在子组件里面进行改变 传递过来的"值",会报错: [Vue warn]: Avoid mutating ...
- Scrapy中的Settings
Settings Scrapy设置(settings)提供了定制Scrapy组件的方法.可以控制包括核心(core),插件(extension),pipeline及spider组件.比如 设置Json ...
- Linux 命令行作弊工具安利
本文转自 微信公众号<Linux爱好者>的一篇文章,觉得工具非常好使,且极具使用价值,所以在此安利一下 Linux 用户的福音,记忆力解放!快速调用复杂命令 刚学的一句新命令,才用完就忘了 ...
- CentOS7下安装Nexus私服及基础配置
环境准备 VMware上安装CentOS7 XShell/Xftp NexusOSS-3.10 jdk1.8 安装 使用root用户登录,将安装包均放置在/usr/local文件夹下 使用Xshell ...
- jzy3D从入门到弃坑_4尝试使用jzy3D1.0画图失败
jzy3D从入门到弃坑_4 尝试使用jzy3D1.0画图失败 觉得有用的话,欢迎一起讨论相互学习~Follow Me 记录一下使用jzy3D1.0失败 究其原因在于 本人才疏学浅,对于JAVA ope ...
- oracle 导出,导入表
导出 exp DZQZ/DZQZ@orcl file=D:/DZQZ.dmp log=D:/DZQZ.log 导入 imp DZQZ/DZQZ@orcl file=D:\电子取证\DZQZ.dmp f ...
- phpspreadsheet 中文文档(一) 访问单元格
2019年10月11日11:45:09 访问单元格 访问电子表格中的单元格应该非常简单.本主题列出了一些访问单元的选项. 通过坐标设置单元格值 可以使用工作表的setCellValue()方法来按坐标 ...