精彩文章免费看

Express服务器连接Mysql并读取数据,解决MySQL拒绝访问的问题

之前在编写代码的过程中,我们把数据放到了服务器上,作为静态json文件进行读取。然而,这很不利于数据的维护。因此,我们尝试进行前后端和数据库的分离。将数据库与服务器连接,再由服务器连接前端,前端通过服务器读取数据库中的数据。

首先是Mysql的使用

我们使用Navicat连接Mysql对数据库进行管理。新建与Mysql的链接,输入密码之后即可链接。

服务器连接数据库+读取数据

在服务器目录下npm install sql
在路由route里创建用于连接数据库的js文件mysqlConnection.js,用于连接Mysql。

var mysql = require('mysql');//调用MySQL模块
//创建一个connection
class Database
    //js的构造器
    constructor(){
        this.connection = mysql.createConnection({
            host: '127.0.0.1', //数据库所在主机IP
            user: 'root',     //数据库用户名
            password: '******',     //数据库密码
            port: '3306',       
            database: 'student', //数据库名称
        this.connection.connect((err) => {
            if (err) { console.log("连接失败") }
            else { console.log("连接成功") }
    //读取表中数据
    getHnf(res){
        var resultData = {};
        this.connection.query("select * from students",
            function(err,result){
                if(err){
                    console.log(err);
                    resultData=result;
                    res.send({result:resultData});
// 把databasse导出 
module.exports = Database;

在routes/index.js中进行设置

var express = require('express');
var router = express.Router();
//+引入数据库连接
var Database = require('./mysqlConnection')
/* GET home page. */
router.get('/', function(req, res, next) {
  //+创建database
  var database = new Database();
  console.log(database.connection);
  res.render('index', { title: 'Express' });
module.exports = router;

创建新的路由

var express = require('express');
var router = express.Router();
var Database = require('./mysqlConnection')
router.get('/', function(req, res, next) {
  new Database().getHnf(res);
module.exports = router;

在app.js中进行映射

var hnf = require('./routes/hnf')
app.use('/hnf',hnf);

这样我们就可以使用 http://ip/hnf 访问数据了

连接过程中Mysql拒绝被访问

出现这个问题是因为我们的Mysql不允许远程登录,所以远程登录失败了,解决方法如下:

在装有MySQL的机器上找到Mysql.exe的目录,在目录下运行cmd,依次运行下列四个命令。

  • mysql -u root -p
    //根据提示输入密码
  • use mysql;
  • update user set host = '%' where user = 'root';
    //不要忘记输入分号,这一句执行完可能会报错,不用管它。
  • FLUSH PRIVILEGES;
  • 经过上面4步,就可以解决这个问题了。
    注: 第四步是刷新MySQL的权限相关表,一定不要忘了。

    前端通过服务器使用数据库中的数据

    利用服务器中为读取到的数据库中的数据配置的路由地址,可以来访问数据库中的数据。

    <script>
    import axios from 'axios'
    export default {
      name: "Story",
      data(){
            return{
                result:[],
      methods: {
        getCityInfo () {
                // 发送axios请求,请求地址在括号里
                axios.get('http://10.207.125.34:3000/hnf')
                    .then(this.handleGetCityInfoSucc)       
            handleGetCityInfoSucc (res) {
                //console.log(res.data)
                this.result = res.data.result
                console.log(this.result)
      mounted () {
            this.getCityInfo()
    </script>
    

    结果:前端可以访问数据