node与后台数据库连接方案

                                                             node与后台数据库连接方案

   在项目实际开发过程中,当连接好假数据之后就需要和后台的数据连接,现如今数据库的总类繁多,但是主要使用的还是mysql,orcal 等关系型数据库。因此在这里选择以mysql作为讲解的实例。

  在window的电脑中启动mysql命令行的方式为:
  1. 鼠标位置为windows图标处,点击鼠标右键同时按下shift键,打开管理员权限界面,然后输入net start mysql指令进行连接
  2.然后输入mysql -hlocalhost -uroot -p;随后输入登录密码即可进入,然后可以数据 show databases;展示数据库信息
当遇到client does not support authentication protocol requested by server consider时
  只需要输入ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';后面
的password为你数据库的登录密码 然后使用FLUSH PRIVILEGES;更新即可

在使用node进行后台管理server端时,需要在后台中去引入mysql的依赖,即使用npm install mysql --save完成局部安装,然后再在文件中引入mysql,然后使用mysql.createConnection去创建一个连接,接着就是使用con.connect()去连接这个数据库,然后在con.query()中执行sql语言,最后就是断开数据库连接con.end()。具体先看一个连接的例子,代码如下:

const mysql = require('mysql');
const con = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'root',
    port: '3306',
    database: 'myblog'
})
con.connect();
const sql = `select * from user;`;
con.query(sql,(err,result) => {
    if(err){
        console.log(err);
        return;
    }
    console.log(result);
})
con.end();
了解了上面的整个数据库的流程之后,再来理解下面的内容就会更加的容易了,对于上面连接数据库的代码中,需要对其做一个拆分。首先是createConnecttion()中数据库的信息,由于项目在开发与实际运行中所连接的数据库不同,因此需要对其做一个配置处理,主要做好开发与实际上线之间的分离。其次还需要将执行sql语句部分的内容分离处理,最后将分离出来的部分导入到当前的这个文件中进行调用即可,这样做的好处就是满足模块化开发的需求,便于我们去管理,将所有有关于数据库的操作都放在一个文件中更易于检查与查询。那么下面就以之前说的博客server端开发为例进行拆分:

在node博客搭建的过程中,我们首先需要的就是配置一个文件,此文件是用于配置环境的,在线上环境和线下环境所
用的数据库按理来说是不一样的,他们所使用的指令也是不相同的,因此在这里需要配置环境参数。具体的代码如下:
const env = process.env.NODE_ENV; //环境参数

let MYSQL_CONF;

//线下环境使用,这个时候的服务器时本地的,如果在做线上开发的时候需要将host中的地址做一个更改
if(env === 'dev'){
    MYSQL_CONF= {
        host: 'localhost',
        user: 'root',
        password: 'root',
        port: '3306',
        database: 'myblog'
    }
}

//线上环境
if(env === 'production'){
    MYSQL_CONF= {
        host: 'localhost',
        user: 'root',
        password: 'root',
        port: '3306',
        database: 'myblog'
    }
}

//最后导出的是数据库中的信息
module.exports = {
    MYSQL_CONF
}
最后就是导出这个部分所连接的数据库中的信息

接下来要进行的模块就是对于操作数据库的函数的进行封装,最后只要向这个封装好的函数传入sql语句就
可以实现对数据库的操作。具体的实现代码如下:
const mysql = require('mysql');
const { MYSQL_CONF } = require('../conf/db');
//创建连接
const con = mysql.createConnection(MYSQL_CONF);
//连接数据库
con.connect();
//统一的执行sql函数,因此在这里将里面的内容封装起来即可
function exec(sql){
    //在这里使用Promise来做这个异步的处理
    const promise = new Promise((resolve,reject) => {
        con.query(sql,(err,result) => {
            if(err){
                reject(err);
                return;
            }
            resolve(result);
        })
    })
    return promise;
}
module.exports = {
    exec
}
需要注意的就是exec是一个promise对象
接着需要进行就是关于list路由中的数据进行连通,首先是在getList中即处理信息层的部分进行需求实现,
具体的代码如下:
  const getList = (author,keywords) => {
    //此部分用于连接数据库而做,在这里使用1=1是为了防止如果author或者是keywords都不存在
    //的时候语法报错
    let sql = `select * from blogs where 1=1 `;
    if(author){
        sql += `and authors='${author}' `;
    }
    if(keywords){
        sql += `and title like '%${keywords}%' `;
    }
    sql += `order by createtime desc;`

    //在这里需要注意的就是使用的exec是一个Promise对象
    return exec(sql);
}

最后在这里需要做一个补充说明,需要在之前的app.js中对处理blog路由部分的代码进行一个更改,更改的原因就是因为此时所获取到的数据是一个promise对象。因此在这里将具体的代码实现,具体的代码如下:
const blogResult = handleBlogRouter(req,res);
        if(blogResult){
            blogResult.then(blogData => {
                if(blogData){
                    res.end(
                        JSON.stringify(blogData)
                    )
                }
            })
            return
        } 

这样就实现了整个项目的数据的连接,具体的请参考https://github.com/whocareit/blog中的blog_1中的代码部分。

猜你喜欢

转载自blog.csdn.net/care_yourself/article/details/101145343