zoukankan      html  css  js  c++  java
  • express

    一,express基础

    新建serve.js, npm init -y, 安装express包

    // 1.引入express
    const express = require("express");
    
    // 2.创建服务器应用实例,app->application
    const app = express();
    
    /* 4.注册路由(接口)
        app.get(参数一,参数二)->创建get路由
        参数一:路由路径
        参数二:回调函数,接收两个实参
            request->请求报文对象
            response->响应报文对象
    */ 
    app.get("/test",function(request,response){
        console.log('/test');
        // 通过response.end方法可以返回数据
        response.end('haha')
    })
    
    /*
        功能:测试接口,获取数据,跑通前后端
        method:GET
        接口地址:/test
        必传参数:无
    */
    
    app.post("/login",function(request,response){
        console.log("/login");
        response.end("login success!")
    })
    
    
    // 3.运行服务器应用,并监听端口
    // 端口号可以任意选择,但是不要小于1000
    app.listen("3001",function(err){
        if(err){
            console.log('服务器连接失败',err)
        }else{
            console.log('服务器启动成功,启动于http://localhost:3001上')
        }
    })

    路由相关

    const express =require('express');
    
    const app = express();
    
    /*
    面试题一:什么是路由
    1)路由就是对象
    2)可以使用键值对表示 key:value
    3)key:路由路径
    4)value:请求返回的数据
    5)let obj={name1:xiaoming}  obj.name1->xiaoming
    
    面试题二:路由分类
    1.前端路由
        1)前端路由的解析是由js库负责的(vue-router,react-router-dom)
        2)前端路由不走网络传输层
        3)前端路由获取到的是'组件'
        总结:前端路由就是路由路径和路由组件之间的映射关系
    
    2.后端路由
        1)后端路由的解析是由服务器负责
        2)需要前端发送请求触发
        3)后端路由获取到的是响应数据(json)
        总结:后端路由就是路由路径+请求方式,与回调函数之间的映射关系
    */
    
    /*
    路由传参:
    1.GET
        1)query传参-> url?key=value&key2=value2 ->req内部有请求的所有的数据->req.query
        2)params传参
            1.需要提前声明占位符
            2.读取方式:req.params
            3.params的key来源于声明占位符时候(:后面的内容)
    2.POST
        1)query传参-> url?key=value&key2=value2 ->req内部有请求的所有的数据->req.query
        2)params传参
            1.需要提前声明占位符
            2.读取方式:req.params
            3.params的key来源于声明占位符时候(:后面的内容)
        3)body(请求体传参)
            1.读取方式:req.body->暂时不行->后面可以通过插件搞定
            2.由于前两种数据拼接在URL中,所以数据量较小
                请求体传参好处,数据量可以很大
            3.上面两种传参方式是在URL中以明文传送,请求体传参会以密文传送,安全性较高
                req.on("data",function(){
    
                })
    
     */
    
    /*
        编码格式
                Node.js使用UTF-8
                01->A
                浏览器默认使用GBK->GB2312
                01->a
    
        res的api
                1)res.end(数据)->直接将数据返回给前端,不进行任何处理
                2)res.send(数据)->根据数据内容,修改了Content-Type内部的编码格式,并返回
                3)res.json(数据)->把数据转换成json字符串,根据数据内容,修改了Content-Type内部的编码格式,并返回
                4)res.cookie()->用于设置cookie
                5)res.set(配置对象)->用于设置响应头配置
                6)res.status(状态码)->用于设置本次响应的状态码
    */
    
    app.get('/test/:id',function(req,res){
        console.log('get /test');
        // console.log(req.query)
        // console.log(req.query.username)
        // console.log(req.query)
        console.log(req.params)
        res.set({
            "Content-Type":"text/html;charset=utf-8"
        })
        res.status(404).end('请求失败')
        // res.send('haha哈哈')
        // res.json({name:"哈哈"})
    })
    
    app.post('/test',function(req,res){
        console.log('post /test');
        // console.log(req.query)
        // console.log(req.query.username)
        // console.log(req.params)
        // console.log(req.body)
        req.on("data",function(msg){
            console.log(msg.toString());
        })
        res.end('xixi')
    })
    
    
    app.listen("3001",function(err){
        if(err){
            console.log('服务器连接失败',err)
        }else{
            console.log('服务器启动成功,启动于http://localhost:3001上')
        }
    })

    中间件使用,需要下载connect-multiparty包

     
    const express =require('express');
    const path =require('path');
    const multiparty = require('connect-multiparty');
    
    const app = express();
    
    /*
        什么是中间件
            数据类型:函数
            作用:
                1.扩展一些功能
                2.修改请求头,响应头
                3.执行下一个中间件
            体现形式:
                1)function(req,res,next){}
                2)req->请求报文对象
                3)res->响应报文对象
                4)next->执行下一个中间件
        中间件的特点:
            1)所有的请求,无论地址,无论请求方式都会经过中间件
            2)如果上一个中间件不放行,下一个不会执行,尽量不要在前面的中间件去返回数据,否则后面中间件可能会出问题
            3)无论是路由,还是中间件,先匹配到谁,就先执行谁
    
        内置中间件:
            1)express.static(绝对文件夹路径)->它适用于配置静态文件路径
                path模块 -> 当前文件绝对路径__dirname
                当前端请求文件时,回去publish文件夹下寻找
                express.static(path.resolve(__dirname,"./publish"))
            2)express.json()->它适用于解析raw中的json请求体数据
            3)express.urlencoded()->它适用于解析xxx-form-urlencoded中的请求体数据
    
        第三方中间件:
            包名:connect-multiparty
            用处:适用于解析form-data格式的请求体参数
            用法:
                全局使用:app.use(multiparty())
                局部使用:app.post('/test',multiparty(),function(req,res){
                            console.log('body',req.body);
                            res.send('post /test success')
                        })
    */
    
    //自定义中间键
    // app.use(function(req,res,next){
    //     console.log('hello world!!!')
    //     res.send('你已成功到达中间件1')
    //     // next();
    // })
    
    // app.use(function(req,res,next){
    //     console.log('hello world')
    //     res.send('你已成功到达中间件2')
    // })
    
    // console.log(__dirname)
    // console.log(path.resolve(__dirname,"./publish"));
    app.use(express.json())
        .use(express.urlencoded({extended:true}))
     // 直接在改文件夹下寻找资源
        .use(express.static(path.resolve(__dirname,"./publish")))
        // .use(multiparty());
    
    
    
    app.get('/test',function(req,res){
        console.log("你已成功到到/test")
    })
    
    app.post('/test',multiparty(),function(req,res){
        console.log('body',req.body);
        res.send('post /test success')
    })
    
    app.post('/test1',function(req,res,next){
        console.log('body',req.body);
        res.send('post /test success')
        next();
    })
    
    app.use(function(){
        console.log('路由之后的中间键')
    })
    
    app.listen("3001",function(err){
        if(err){
            console.log('服务器连接失败',err)
        }else{
            console.log('服务器启动成功,启动于http://localhost:3001上')
        }
    })
  • 相关阅读:
    C单链表操作
    如何为linux系统设置全局的默认网络代理
    Linux下动态库使用小结
    图片替代鼠标光标
    axios+FormData文件上传
    vue之回车触发表单提交
    viewer 照片查看器
    contains 之 点击元素外位置隐藏元素
    vue-cli 3.0之跨域请求代理配置及axios路径配置
    css之单边阴影
  • 原文地址:https://www.cnblogs.com/fsg6/p/13670931.html
Copyright © 2011-2022 走看看