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>
结果:前端可以访问数据