zoukankan      html  css  js  c++  java
  • 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()函数,整个请求响应流程中止,不在向后执行
    • 调用函数相当于调用下一个中间件,执行完以后自己的函数继续执行
  • 相关阅读:
    清除浮动解决父元素高度塌陷问题
    canvas画动图
    vue实现列表的循环滚动
    localStorage读写操作
    angularJS快速入门
    python模块
    python函数式编程
    python高级特性
    Flask 快速入门
    JQuery Ajax
  • 原文地址:https://www.cnblogs.com/sgs123/p/11435562.html
Copyright © 2011-2022 走看看