zoukankan      html  css  js  c++  java
  • node js 中间件以及mysql模块

    .中间件一共分为5种  应用级中间件  路由级中间件  内置中间件  第三方中间件 错误处理中间件

    1.应用级中间件

    当拦截到请求后 自动执行回调函数  -按照url拦截  应用级中间件必须按照顺序写 同一个服务器下不允许乱顺序;

    app.use( URL, (req,res,next)=>{

      next()  是一个函数,表示往后执行其它的路由或者中间件

    } );

    栗子:

    //创建购物车路由(get /shopping),假设要传递商品的价格price,响应‘商品价格:xxx元’;添加打折的中间件,将所有商品的价格打8折。中间件不需要响应,只是打折
    const express=require('express');
    const app=express();
    app.listen(8080);
    //设置一个中间件
    app.use('/shopping',(req,res,next)=>{
            req.query.price*=0.8;
            next();
    });
    //创建路由
    app.get('/shopping',(req,res)=>{
        res.send('商品:'+req.query.price)
    });

    栗子2

    判断用户名的栗子

    const express=require('express');
    //const querystring=require('querystring');
    const app=express();
    app.listen(8080);
    //设置一个中间件
    
    app.use('/list',(req,res,next)=>{
        if(req.query.name==='root'){
            next();
        }else{
            res.send('请输入正确的用户名');
        };
    
    });
    //创建路由
    app.use('/list',(req,res,next)=>{
        res.send('登陆成功')
    });

    2.路由级中间件

    就是在路由器之中使用中间件;

    3.内置中间件  

     只有一个中间件:托管静态资源

      如果浏览器端请求静态资源(html,css,js,图像...),不需要使用路由响应文件,而是让它自动去找。

      app.use( express.static('目录路径') )

      

    //内置中间件 
    const express=require('express');
    const querystring=require('querystring')
    const app=express();
    app.listen(8080);
    //使用内置中间件 就是在一个目录中放置所有文件 引用这个目录 app.use(express.static('./public'));
    app.use(express.static('./public'));
    //编写文件,创建web服务器,托管静态资源到public目录,包含文件klwlogin.html,点击提交发送请求(post  /mylogin),在路由中获取用户名和密码。
    app.post('/mylogin',(req,res)=>{
        req.on('data',(chunk)=>{
                let obj=querystring.parse(String(chunk));  //使用qureystring模块下的parse方法将字符串转为对象
                console.log(obj);
        
        });
        res.send('登陆成功')
    });

    4 body-parser第三方中间件的使用

    const express=require('express');
    //const querystring=require('querystring')
    const bodyParser=require('body-parser'); //引入body-parser 模块 第三方
    const app=express();
    app.listen(8080);
    app.use(express.static('./public'));
    app.use(bodyParser.urlencoded({
        //是否使用扩展的查询字符串模块
        //extended 扩展的
        extended:false
    }));
    app.post('/mylogin',(req,res)=>{
        console.log(req.body)
    });

    5.  mysql 模块

    mysql模块,用来使用nodejs操作mysql数据库

     是一个第三方模块,先下载安装

    一共有两种写法 

    普通模块

    //1.普通连接
        // 引入mysql模块
        const mysql=require('mysql');
        //创建链接对象
        const sql=mysql.createConnection({
            host:'127.0.0.1',
                port:'3306',
                    user:'root',
                password:'',
                database:'tedu'
        });
        //c.connect();
    //执行SQL语句,如果没有连接会自动建立连接
    //参数1:要执行的SQL语句
    //参数2:回调函数,用于获取结果
        //执行sql语句
        sql.query('select * from emp',(err,result)=>{
            if(err)throw err;
            console.log(result);
        });

    2.连接池

    //连接池连接
        const mysql=require('mysql'); //引入mysql模块
    
        const pool=mysql.createPool({  
            host:'127.0.0.1',
                port:'3306',
                    user:'root',
                password:'',
                database:'tedu',
                connectionLimit:20
        });
            //在执行sql语句
            pool.query('select * from emp',(err,result)=>{
                if(err)throw err;
            console.log(result);
            });

     sql注入

    SQL注入  本来让用户输入的值添加了SQL语句

     防止SQL注入:使用占位符(?),将所有SQL语句中的值进行过滤,过滤后会替换占位符。 

      小练习          创建web服务器,托管静态资源到public目录,包含文件add.html,点击提交(get  /add),将部门名称插入到tedu下dept表中。

    const express=require('express');
    const mysql=require('mysql');
    const pool=mysql.createPool({
      host:'127.0.0.1',
      port:'3306',
      user:'root',
      password:'',
      database:'tedu',
      connectionLimit:20 
    });
    const app=express();
    app.listen(8080);
    app.use(express.static('./public'));
    app.get('/add',(req,res)=>{
        pool.query('INSERT INTO dept VALUES(?,?)',[50,req.query.pname],(err,result)=>{
            if(err) throw err;
      console.log(result);
        });
    
    
    });
    <form method='get' action='/add'>
    部门名称<input type='txt' name='pname'>
    
    <input type='submit'>
    </form>
  • 相关阅读:
    kde下sudo出现cannot connect to xserver解决方法
    windows版本的Emacs 无法显示图片的解决方法
    Ubuntu12.04安装VMwareWorkstation8.0.2591240.x86_64
    在Emacs调试JAVA程序,使用GUD模式
    配置SQL Server Session方法(1)
    C#泛型列表List<T>基本用法总结
    VC++的MFC中 获取选中静态文本的内容
    用P3P header解决IE下iframe跨域访问时候session丢失的问题
    ROW_NUMBER()用法(转)
    VC 中与字符串相关的宏 _T、TEXT,_TEXT、L 的作用
  • 原文地址:https://www.cnblogs.com/klwblogs/p/13179093.html
Copyright © 2011-2022 走看看