node连接mysql
数据库配置文件
db.config.js
module.exports = {
host : 'localhost',
user : 'root',
password : '',
database : ''
}
db.js
var mysql = require('mysql');
var dbConfig = require('./db.config');
module.exports = {
query : function(sql,params,callback){
//每次使用的时候需要创建链接,数据操作完成之后要关闭连接
var connection = mysql.createConnection(dbConfig);
connection.connect(function(err){
if(err){
console.log('数据库链接失败');
throw err;
}
//开始数据操作
connection.query( sql, params, function(err,results,fields ){
if(err){
console.log('数据操作失败');
throw err;
}else{
//将查询出来的数据返回给回调函数,这个时候就没有必要使用错误前置的思想了,因为我们在这个文件中已经对错误进行了处理,如果数据检索报错,直接就会阻塞到这个文件中
//这一句是原版的结果插入操作时候报错,改成下面的一句就好了
// callback && callback(JSON.parse(JSON.stringify(results)), JSON.parse(JSON.stringify(fields)));
callback && callback((JSON.stringify(results)), (JSON.stringify(fields)));
}
//results作为数据操作后的结果,fields作为数据库连接的一些字段,大家可以打印到控制台观察一下
//停止链接数据库,必须再查询语句后,要不然一调用这个方法,就直接停止链接,数据操作就会失败
connection.end(function(err){
if(err){
console.log('关闭数据库连接失败!');
throw err;
}
});
});
});
}
};
router.js(路由)
var mysql = require("mysql"); //引用模块
var db = require("./db"); //引入数据库封装模块
var express = require('express');
var router = express.Router()
router.get('/getdata', function (req, res) {
console.log(req.query.name);
//查询
if (req.query.name != '') {
db.query(`SELECT * FROM data where name = '` + req.query.name + `'`, [], function (results, rows) {
// 返回前端查询数据
res.send(results)
})
}
})
router.get('/adddata', function (req, res) {
//插入
db.query(`INSERT INTO data (ind,image,name,plantInt,curInt)
VALUES
(` + req.query.ind + `,'images/p` + req.query.ind + `.jpg','` + req.query.name + `','` + req.query.plantInt + `','` + req.query.curInt + `');`, [], function (results, rows) {
//返回前端数据
res.send(results)
})
})
注意
- 两个文件放同一路径,db.js要调用db.config.js
- 亲测查询和插入可用
坑
- mysql不能用index做列(现在才知道)。
- mysql导入json打死都导不进去,编码改了不知道几遍,最后还是手动。