一、网络服务器

1、http状态码

1xx: 表示普通请求,没有特殊含义

2xx:请求成功

  • 200:请求成功

3xx:表示重定向

  • 301 永久重定向
  • 302 临时重定向
  • 303 使用缓存(服务器没有更新过)

4xx:无法访问

  • 403:无法访问
  • 404:资源找不到

5xx:服务器有错

  • 500:服务器代码有错
  • 502:网关或代理服务器出错
  • 503:服务器已崩溃

状态码使用

  1. res.writeHead('状态码''响应头对象')

2、响应头

响应头:

  • Content-Type:响应的文件类型(MIME类型)

    • 注意:未指定响应文件内容是,默认是html;编码格式默认是系统编码
  • Content-Length: 响应内容的长度 (数字)
  • Access-Control-Allow-Oragin:"*" //设置跨域

设置响应头

  1. {
  2. 'Content-Type':'text/html;charset=utf-8'
  3. }

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搭建一个最基本的服务器

  1. var http = require('http');
  2. var path = require('path');
  3. var server = http.creareServer();
  4. server.on('request',function(req,res){
  5. //配置访问不同的url
  6. if(req.url==='/'){
  7. //根据请求文件的后缀通过path模块得到,可以设置不同的MIME类型
  8. res.writeHead(200,{
  9. "content-Type":"text/html;charset=utf-8;"
  10. })
  11. res.write('<h1>响应内容<h2>')
  12. res.end();
  13. }
  14. })
  15. server.listen(80,function(){
  16. console.log('server is running.....');
  17. })

5、接收get和post方式的传值

get方式客户端同过url传值

  • nodeJS接收使用req.url取值

post方式客户端通过表单传值

  • nodeJS接收使用获取流的方式取值
  1. req.on('data',(a)=>{
  2. //定义传过来的数据
  3. let query ='';
  4. query+=a;
  5. })
  6. req.on('end',()=>{
  7. //完成
  8. res.write('<h1>传递的参数为:'+query+'</h1>');
  9. res.end();
  10. })

二、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)编写路由模块代码
    1. var express = require('express'); //引入express模块
    2. var router = express.Router();//实例化路由对象
    3. //编写路由挂在到路由对象上
    4. router.get('/list.html',function(req,res){
    5. res.send('数据');
    6. })
    7. module.exports = router; //暴露路由对象
    • 3)将编写好的路由模块引入到主模块app.js中,由主模块分配对应的请求到该模块去处理
    1. var vip = require("./routes/vip.js");//引入vip路由模块
    2. app.use("/vip",vip);//分配vip目录下的请求给vip路由去处理

路由的区分

  • 大路由(总路由):app.js 负责接所有请求,对请求进行分配
  • 小路由(分路由):/routes下面的所有路由模块,只负责处理自己管理的目录下的请求

4、express响应对象(res)

  • 响应对象是服务器向客户端响应数据的对象,包含了所有要响应的内容

响应对象的方法

  • res.send();//【重点】返回任意类型的数据给客户端,有以下注意事项:

    • 如果返回一个数字,会当成是状态码,会报错
    • send方法只能出现一次,重复无效,并且会报错
  • 设置状态码并返回内容,支持链式调用
  1. res.status(200).send('任意内容')
  • res.json(); //返回JSON数据,自动设置响应头
  • res.render(); //【重点】模板渲染,自动拼接数据,发给浏览器
  1. res.render('模板名称','模板数据')
  • res.redirect('目标');重定向,可以实现跳转
  • res.set(); //【重点】设置响应头

5、express请求对象(req)

客户端向服务端发送数据的对象,包含请求头和请求体

接收get方式的传值

  • 语法:req.query.参数名

接收post方式的传值

  • 语法:req.body.参数名

匹配URL网址上的数据(匹配模式)

  • 在接请求的地方去匹配,在通过语法进行接收,实现伪静态
  • 语法:req.params.参数名

6、中间件

什么是中间件?

是一个函数,位于客户端和路由之间,可以访问请求对象和响应对象,也可以调起下一个中间件

自定义中间件

  1. app.use(function(request, response, next) {
  2. // 对request和response作出相应操作
  3. // 操作完毕后返回next()即可转入下個中间件
  4. next();
  5. })

伪函数 next()

  • 如果中间件不调用next()函数,整个请求响应流程中止,不在向后执行
  • 调用函数相当于调用下一个中间件,执行完以后自己的函数继续执行

nodeJS从入门到进阶二(网络部分)的更多相关文章

  1. nodeJS从入门到进阶三(MongoDB数据库)

    一.MongoDB数据库 1.概念 数据库(DataBase)是一个按照数据结构进行数据的组织,管理,存放数据的仓库. 2.关系型数据库 按照关系模型存储的数据库,数据与数据之间的关系非常密切,可以实 ...

  2. nodeJS从入门到进阶一(基础部分)

    一.Node.js基础知识 1.概念 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是JavaScript的运行环境 Node.js 使用了一个事件驱动.非阻塞 ...

  3. Wireshark入门与进阶系列(二)

    摘自http://blog.csdn.net/howeverpf/article/details/40743705 Wireshark入门与进阶系列(二) “君子生非异也,善假于物也”---荀子 本文 ...

  4. Weex入门与进阶指南

    Weex入门与进阶指南 标签: WeexiOSNative 2016-07-08 18:22 59586人阅读 评论(8) 收藏 举报 本文章已收录于:  iOS知识库  分类: iOS(87)  职 ...

  5. Docker入门教程(二)命令

    Docker入门教程(二)命令 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第二篇,介绍了Docker的基本命令以及命令的用法和功能. 在Docker ...

  6. SQL Server 扩展事件(Extented Events)从入门到进阶(4)——扩展事件引擎——基本概念

    本文属于 SQL Server 扩展事件(Extented Events)从入门到进阶 系列 在第一二节中,我们创建了一些简单的.类似典型SQL Trace的扩展事件会话.在此过程中,介绍了很多扩展事 ...

  7. Python 简单入门指北(二)

    Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...

  8. 《AngularJS入门与进阶》图书简介

    一.图书封面 二.图书CIP信息 图书在版编目(CIP)数据 AngularJS入门与进阶 / 江荣波著. – 北京 : 清华大学出版社, 2017 ISBN 978-7-302-46074-9 Ⅰ. ...

  9. 免费的 Vue.js 入门与进阶视频教程

    这是我免费发布的高质量超清「Vue.js 入门与进阶视频教程」. 全网最好的.免费的 Vue.js 视频教程,课程基于 Vue.js 2.0,由浅入深,最后结合实际的项目进行了最棒的技术点讲解,此课程 ...

随机推荐

  1. Three.js 快速上手以及在 React 中运用[转]

    https://juejin.im/post/5ca22692f265da30a53d6656 github 的地址 欢迎 star! 之前项目中用到了 3D 模型演示的问题,整理了一下之前学习总结以 ...

  2. Parquet介绍及简单使用(转)

    ==> 什么是parquet         Parquet 是列式存储的一种文件类型   ==> 官网描述: Apache Parquet is a columnar storage f ...

  3. cookie 设置报错 setcookie() expects parameter 3 to be integer, float given in...

    使用 setcookie 函数设置 cookie 报错,报错信息为: setcookie() expects parameter to be integer, float given in... 错误 ...

  4. VUE-013-为elementUI 设置 tootip 宽度

    在表格显示列表中,通常添加 :show-overflow-tooltip="true" 以显示不能完全展示的单元格文案提示.单通常显示为全屏宽度,不易查看,可通过设置全局的样式,进 ...

  5. 【Layui】侧边菜单导航禁用折叠、去除箭头样式

    官方提供的样式代码: <ul class="layui-nav layui-nav-tree" lay-filter="test"> <!-- ...

  6. java Random 抢红包算法

    红包有一个总金额和总数量,领的时候随机分配金额. 维护一个剩余总金额和总数量,分配时,如果数量等于1,直接返回总金额,如果大于1,则计算平均值,并设定随机最大值为平均值的两倍,然后取一个随机值,如果随 ...

  7. C# 发送Post请求(带参数)

    此处内容传输都是用UTF-8编码 1.不带参数发送Post请求 /// <summary> /// 指定Post地址使用Get 方式获取全部字符串 /// </summary> ...

  8. 【npm permission denied错误】npm ERR! Error: EACCES: permission denied, access

    在命令前加上 sudo sudo npm install --save-dev grunt 不过这样子可能还是不行,你需要这样: sudo npm install --unsafe-perm=true ...

  9. 【C/C++开发】C++之enum枚举量声明、定义、使用与枚举类详解与枚举类前置类型声明

    众所周知,C/C++语言可以使用#define和const创建符号常量,而使用enum工具不仅能够创建符号常量,还能定义新的数据类型,但是必须按照一定的规则进行,下面我们一起看下enum的使用方法. ...

  10. (转)Intellij Idea工具栏添加打开选中文件的资源管理器位置

    背景:在idea的view>toolbar上面添加工具按钮,能够简化操作,现在添加打开资源管理按钮,后续功能待研究 Intellij Idea工具栏添加打开选中文件的资源管理器位置 工具栏-右击 ...