• node.js(3)——express


    express框架

    【基于nodejs,用于构建web服务器的框架】

    官网:www.expressjs.com.cn

    安装:npm install express

    例1:创建web服务器

    // 引入express第三方模块
    const express = require('express');
    // 创建web服务器
    var server=express();
    server.listen(3000,()=>{
        console.log('success');
    });

    1、路由:

      浏览器向web服务器发来请求,web服务器要根据请求的方法和请求的url来做出响应。

      路由三要素:请求的方法、请求的url、响应的内容;

      响应对象(res):

        res.send()   响应文本,只能响应一次send,如果是数字认为是状态码;

        res.sendFile()     响应文件,必须使用绝对路径(__dirname)

        res,redirect()      响应的重定向

      路由中的请求对象:

        req.method              获取请求的方法

        req.url                      获取请求的url

        req.header    获取请求的头信息

        req.query      获取请求时以查询字符串形式传递的数据,返回格式为对象

    例2:接收请求 做出响应

    // 引入express第三方模块
    const express = require('express');
    // 创建web服务器
    var server=express();
    server.listen(3000,()=>{
        console.log('success');
    });
    
    /* 接收浏览器的请求
    1、根据请求的url和方法做出不同的响应
    2、 ————给服务器添加路由(根据请求的url)
    3、请求的url:/login   请求的方法是get
    */
    
    server.get('/login',(req,res)=>{
        // req   请求的对象
        // res   响应的对象
        // 响应文本
        res.send('this is login page!');
    
    });

    例3:send结束后不允许再次send

    /* 练习:创建路由,
    1、请求的方法是get   请求的url:/index   this is index page
    2、 post     /login    this is login page
    3、 get      /detail   this is detail
    */
    
    // 引入第三方模块express
    const express=require('express');
    // 创建web服务器
    var server = express();
    // 监听端口
    server.listen(3000);
    // 接收请求 做出响应
    server.get('/index',(req,res)=>{
        res.send('this is index page!');
    });
    server.get('/detail',(req,res)=>{
        res.send('this is detail page!');
    });
    server.post('/login'(req,res)=>{
        res.send('this is login page!');
    });

    例4:响应一个文件(必须使用绝对路径)

    【.html文件】

    <!-- index.html -->
    
    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
    </head>
    <body>
        <h1>test</h1>
    
    </body>
    </html>

    【.js文件】

    // 引入第三方模块express
    const express=require('express');
    // 创建web服务器
    var server = express();
    // 监听端口
    server.listen(3000);
    // 接收请求 做出响应
    server.get('/index',(req,res)=>{
        //res.send('this is index page!');
        res.sendFile(__dirname+'/index.html');
    });

    例5:重定向

    // 引入第三方模块express
    const express=require('express');
    // 创建web服务器
    var server = express();
    // 监听端口
    server.listen(3000);
    // 接收请求 做出响应
    server.get('/index',(req,res)=>{
        //res.send('this is index page!');
        res.sendFile(__dirname+'/index.html');
    });
    // 重定向到/index
    server.get('/',(req,res)=>{
        res.redirect('/index');
    });

    例6:

    /*
    使用express创建web服务器,创建以下路由
    get  '/index'       发送文本“这是首页”
    get  '/login'       送文件“login.html”
    post '/register'    发送文本“注册成功”
    get  '/'            跳转到/index
    */
    
    
    // 引入express模块
    const express=require('express');
    // 创建web服务器
    var server=express();
    // 监听端口
    server.listen(3000);
    // 发出请求接收响应
    server.get('/index',(req,res)=>{
        res.send('this is index page!');
    });
    server.get('/login',(req,res)=>{
        res.sendFile(__dirname+'/login.html');
    });
    server.post('/register',(req,res)=>{
        res.send('success');
    });
    server.get('/',(req,res)=>{
        res.send('/index');
    });

    2、post和get请求

    •   get请求以查询字符串的形式传递数据,服务器端使用req.query获取数据,结果是对象;
    •   post请求是通过表单提交的方式传递数据,服务器端通过事件的形式获取数据;

          req.on('data',(buf)=>{

           // 获取的结果是buffer数据,需要使用查询字符串解析为对象;

          });

       1)、以get 方式提交,客户端和服务端交互

    【login.html】

    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
    </head>
    <body>
        <h1>登录</h1>
        <!-- 
            form---用于表单提交;
            action---向服务器请求的url;
            method---请求的方法;
            name给当前的数据起名字,后台接收根据名字找到对应的数据;
            服务器需要有对应的路由来接收这个请求
         -->
        <form action="/mylogin" method="get">
            用户:<input type="text" name="username"><br>
            密码:<input type="text" name="password"><br>
            <input type="submit" name="submit">
            
        </form>
    
    </body>
    </html>

    【.js】

    // 请求方法  get   请求url  /login    响应文件login.html
    
    const express=require('express');
    var server=express();
    server.listen(3000);
    server.get('/login',(req,res)=>{
        res.send(__dirname+'/login.html')
    });
    server.get('/mylogin',(req,res)=>{
        // 获取表单中传递的数据
        var obj=req.query;
        res.send('success,用户名为:'+obj.username+'密码为:'+obj.password);
    });

     例1:

    // 练习:创建web服务器,新建路由(get, /reg),响应一个注册文件reg.html
    const express=require('express');
    var server=express();
    server.listen(3000);
    server.get('/reg',(req,res)=>{
        res.send(__dirname+'/reg.html');
    });

      2)、以post方式提交,客户端和服务器交互

    【reg.html】

    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
    </head>
    <body>
        <h1>请注册</h1>
        <!-- 
            form---用于表单提交;
            action---向服务器请求的url;
            method---请求的方法;
            name给当前的数据起名字,后台接收根据名字找到对应的数据;
            服务器需要有对应的路由来接收这个请求
         -->
        <form action="/myreg" method="post">
            用户:<input type="text" name="username"><br>
            密码:<input type="password" name="password"><br>
            手机:<input type="text" name="phone"><br>
            邮箱:<input type="email" name="email"><br>
            <input type="submit" name="submit">    
        </form>
    
    </body>
    </html>

    【.js】

    // 练习:创建web服务器,新建路由(get, /reg),响应一个注册文件reg.html
    const express=require('express');
    const querystring=require('querystring');
    var server=express();
    server.listen(3000);
    server.get('/reg',(req,res)=>{
        res.send(__dirname+'/reg.html');
    });
    server.post('/myreg',(req,res)=>{
        // 获取表单中post请求传递的数据
        // 以事件的形式获取表单中的数据
        req.on('data',(buf)=>{
            //  buffer格式转换为查询字符串
            var str=buf.toString();
            //  将查询字符串解析为对象
            var obj=querystring.parse(str);
            console.log(obj);
            // 获取数据后,响应到浏览器
            res.send('注册成功,用户名为'+obj.username);
        });
    });

    3、使用路由传递数据——路由传参

       1)设置路由中接收的名称

      server.get('/detail/:lid',(req.res)=>{

        req.params       // 获取路由传递的数据,格式为对象

      });

       浏览器请求方式 (5就是传递的数据使用lid来接收)

        http://127.0.0.1/detail/5

    例1:

    /* 创建一个购物车的路由,请求的URL;/shopping,请求的方法get,
    传递商品的价格price和名称pname */
    
    const express=require('express');
    var server=express();
    server.listen(3000);
    //    /shopping/5000/dell
    server.get('/shopping/:price/:pname',(req,res)=>{
        console.log(req.params);
        res.send('这是购物车');
    });

    4、路由器

      路由在使用过程中,不同的模块可能出现相同的url,把同一个模块下的路由挂载到特定的前缀。

      例如:商品模块下的路由挂载到/product,访问形式/product/list,用户模块下的路由挂载到/user,访问形式/user/list

      路由器就是一个js文件,把同一模块下的路由放到一起

    【步骤】 

      【路由器】

    // 1、引入express
    const express=require('express');
    // 2、创建空的路由器
    var router=express.Router();
    // 3、往路由器中添加路由
    router.get('/list',(req,res)=>{  });
    // 4、导出路由器
    module.exports=router;

      【web服务器】

    // 1、在web服务器下使用路由器模块
    const userRouter=require('./user.js');
    // 2、把路由器userRouter挂载到/user下,访问形式变为/user/list
    server.use('/user',userRouter);

    例1:

    【user.js】

    //[user.js]
    // 使用路由器来管理用户模块下的路由
    const express=require('express');
    // 创建一个空的路由器---对象
    var router=express.Router();
    // 添加路由
    router.get('/list',(req,res)=>{
        res.send('这是用户列表');
    });
    router.get('/delete',(req,res)=>{
        res.send('删除成功');
    });
    
    // 导出路由器router
    module.exports=router;

    【web服务器引用user.js】

    /* 商品模块下的路由挂载到/product,访问形式/product/list,
    用户模块下的路由挂载到/user,访问形式/user/list */
    // 导入路由器user.js
    const userRouter=require('/.user.js');
    //[服务器]
    const express=require('express');
    var server=express();
    server.listen(3000);
    // 服务器使用路由器
    // 将引入的用户路由器挂载到/user
    // 访问形式/user/list
    server.use('/user',userRouter);

    例2:

    【web服务器文件】

    /* 1、商品模块下的路由挂载到/product,访问形式/product/list,
    用户模块下的路由挂载到/user,访问形式/user/list ;
       2、创建商品模块的路由器product.js,添加路由商品列表(list)、
    商品删除(delete)、商品添加(add),在web服务器引入,并挂载
    到/product  */
    
    
    // 导入路由器user.js
    const userRouter=require('/.user.js');
    // 引入路由器[product.js]
    const product_router=require('./product.js');
    //[服务器]
    const express=require('express');
    var server=express();
    server.listen(3000);
    // 服务器使用路由器
    // 将引入的用户路由器挂载到/user
    // 访问形式/user/list
    server.use('/user',userRouter);
    // 将路由器product_router挂载到/product下
    server.use('/product',product_router);

    【user.js】

    // 使用路由器来管理用户模块下的路由
    const express=require('express');
    // 创建一个空的路由器---对象
    var router=express.Router();
    // 添加路由
    router.get('/list',(req,res)=>{
        res.send('这是用户列表');
    });
    router.get('/delete',(req,res)=>{
        res.send('删除成功');
    });
    
    // 导出路由器router
    module.exports=router;

    【product.js】

    // [product.js]
    // 引入express
    const express=require('express');
    // 创建路由器
    var router=express.Router()
    // 添加路由
    router.get('/list',(req,res)=>{
        res.send('商品列表');
    });
    router.get('/add',(req,res)=>{
        res.send('商品添加');
    });
    router.get('/delete/:lid',(req,res)=>{

        // 获取此值
        console.log(req.params);

        res.send('商品删除');

    });
    // 导出路由器
    module.exports(router);

      

  • 相关阅读:
    mybatis四大接口之 ParameterHandler
    mybatis四大接口之 Executor
    网络协议
    4、Android UI测试
    3、Android构建仪表测试
    【翻译】Ext JS 6.2 早期访问版本发布
    2、Android构建本地单元测试
    1、Android测试入门
    安卓中的事件分发机制源码解析
    安卓IPC机制之Binder详解
  • 原文地址:https://www.cnblogs.com/hd-test/p/11859259.html
Copyright © 2020-2023  润新知