zoukankan      html  css  js  c++  java
  • Nodejs sql模块及模块化思想

    在nodejs中和后台数据库连接,并进行数据库操作

    1.安装mysql文件 

      需要先初始化nodejs,及express后,再从shell命令行里进入项目的根目录,输入....dec29>npm install mysql --save-dev回车,等待一段时间即可。

    2.安装成功后 

      2.1 登录

       在routes这个文件夹下,根据模块化的思想创建一个模块

       这里的一个登录的例子和上一篇文章不同,这里讲的是用户名及密码已经存在于数据库中,第二次登录。

       1>模拟这个场景,需要先在mysql中创建一个数据库dec30及一个表t_use,表中有数据,如下图所示:

      2>创建初始登录界面(htmlj界面),代码如下:

      

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    <form action="login.do" method="post">
        <label>账号:</label>
        <input type="text" name="username3"/>
        <label>密码:</label>
        <input type="password" name="pwd3"/>
        <button>提交</button>
    </form>
    </body>
    </html>
    

      

      3> 在routes文件夹下创建useModule.js文件 

          步骤:配置sql连接信息-->打开sql连接-->操作sql--->关闭sql

     
    "use strict";
    const mysql=require("mysql");//调用数据库模块
    var useModule= {
        login: function (request, response) {
            let username3 = request.body.username3;
            let pwd3 = request.body.pwd3;
            console.log(request.body);
            //配置数据库的连接信息
           const  myconn = mysql.createConnection({//定义了一个数据库的对象myconn
                host: "localhost",//连接数据库所在的主机名,本地的就是localhost。其他的给指定的ip地址
                user: "root",//数据库连接中的账号名
                password: "root",//数据库连接中的密码
                port: "3306",//这是和数据库连接的端口,是数据库开启时的端口号,默认3306;如果设置了就是设置了的端口号
                database: "dec30"//这是要在哪一个数据库中查找数据的
           });
            //console.log(myconn);
            myconn.connect();//连接数据库
            myconn.query("select * from t_use where U_name=? and U_pwd=?",[username3,pwd3],function(err,data){
                //从数据库中查询数据,其中的?代表占位符。第一个参数是sql语句,第二个参数为一个数组,sql的查询参数,第三个是返回的结果。err是错误结果的集合,
    //data是正确结果的集合。如果这里的where语句使用U_name="admin" and U_pwd="123"会造成密码泄露,同时也会造成无密码登录成功,这里使用?占位符,避免了此。 console.log(err); console.log(data); if(data!=undefined&&data.length>0){ response.redirect("main.html")//登录成功后的跳转到的页面 }else{ response.send("您输入的账号、密码有误,请重新输入!") } }); //**insert这段代码激活后,和前面的query响应头冲突了 myconn.query("insert into t_use (U_name,U_pwd)values(?,?)",[username3,pwd3],function(err,data){ if(data!=undefined&&data.length>0){ response.redirect("main.html")//登录成功后跳转的页面 }else{ response.send("您输入的数据有误!") } }); myconn.end();//关闭数据库连接,一定要有这句,不然会造成数据库崩溃 module.exports=useModule;//将这个useModule这个模块文件公开

      

    4>login这模块创建好后,需要在app.js主文件中调用这个模块,代码如下:

    app1.post("/login.do",useModule.login);
    //这里不能设置成login(),加()代表执行函数,这里是需要将login给post作为调用函数;同时前面的“/login.do”拦截与html界面中的action一样
    //至于什么时候调用,是在当请求来的时候才调用
    

      到这里,这个登录模块就创建好了。

    2.2 数据库sql封装

        1>根据我们上面创建的登录连接数据库的模块化思想,可以将数据库这块的配置,操作封装起来,方便调用。在routes文件夹下新建一个js文件,用于sql封装,我创建的为dbconfig.js,代码如下:

    /**
     * Created by Administrator on 2017/1/3.
     */
    "use strict";
    const mysql=require("mysql");
    const mydb={
        myconfig:{
            //配置数据库信息,写在getconnectionSql外面,可以更换数据库,方便代码维护,也是对外提供了一个控制
            host:'localhost',
            user:'root',
            password:'root',
            port:'3306',
            database:'dec30'
        },
        getconnectionSql:function(sql,arr,fn){
            //创建连接一定要写在这个函数里面,不然会造成登录成功后,页面返回继续重新登录就无法登录;
            //this指的是myconfig这个配置,createConnection是sql默认的一个封装函数
            let mysqlconnection=mysql.createConnection(this.myconfig);
            mysqlconnection.connect();
            mysqlconnection.query(sql,arr,fn);
            mysqlconnection.end();
        }
    };
    module.exports=mydb;
    

      2>在useMdoule.js文件里的写法根据sql的封装,如下:

    "use strict";
    const dbconfig =require("./dbconfig.js");
    var useModule= {
        login: function (request, response) {
            let username3 = request.body.username3;
            let pwd3 = request.body.pwd3;
            console.log(request.body);
            let sql="select * from t_use where U_name=? and U_pwd=?";
            dbconfig.getconnectionSql(sql,[username3,pwd3],function(err,data){
                    if(data!=undefined&&data.length>0){
                               response.redirect("main.html")
                    }else{
                                 response.send("您输入的账号、密码有误,请重新输入!")
                    }
    
            })
    
        },
        reg:function(request,response){//注册的功能
              let sql="insert into t_use values(?,?)";
              dbconfig.getconnectionSql(sql,[111,222],function(err,data){
    
              })
        }
    };
    module.exports=useModule;
    

      

       

  • 相关阅读:
    0113-06-侯舒舒(作业-复盘分析)
    0113-06-侯舒舒(日报)
    总结
    0108-06-侯舒舒(日报)
    cobalt strike插件
    关于python安装后更新的一些问题
    常用dos命令
    curl命令用法
    2020/1/16
    2020/1/15
  • 原文地址:https://www.cnblogs.com/potato-lee/p/6247930.html
Copyright © 2011-2022 走看看