1、node里面使用mysql
查询语句的表和字段名用两个??,参数值用?表示
(1)数据库链接
var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : 'a11111111', database : 'ccl_project_db' }); module.exports = connection;
使用:
connection.connect(function(err, conne) { if (err) throw err; const sql = `select * from user`; connection.query(sql, function(err, rows) { if (err) throw err; res.json(rows); }); });
(2)连接池
var mysql = require('mysql'); var pool = mysql.createPool({ host : 'localhost', user : 'root', password : 'a11111111', database : 'ccl_project_db', port: 3306, stringifyObjects: true, //对象类型设置。默认false : RowDataPacket对象 , true : json对象 dateStrings : true, //日期时间类型设置。默认false : 2016-08-31T02:00:32.000Z (UTC通用标准时) , true : 2016-08-31 10:00:32 (常用日期时间格式) }); //数据库连接池 var query=function(sql,options,callback){ pool.getConnection(function(err,conn){ if(err){ callback(err,null,null); }else{ conn.query(sql,options,function(err,results,fields){ //释放连接 conn.release(); //事件驱动回调 callback(err,results,fields); }); } }); }; module.exports = query;
使用:
const sql = `select * from user`; query(sql, '', function(err,results,fields){ if (err) throw err; res.json(results); });
2、图片上传和保存
注意:
(1)如果保存图片不存在的话,要自己手动创建,不然图片保存不下来
(2)打开服务器本地的静态文件图片乱码
解决方法:
var options = { dotfiles: 'ignore', etag: false, extensions: ['htm', 'html'], index: false, maxAge: '1d', redirect: false, setHeaders: function (res, path, stat) { res.set('x-timestamp', Date.now()) } } app.use(express.static('public', options));
(3)上传的图片太大报错
request entity too large 413
解决
app.use(bodyParser.urlencoded({limit:'50mb',extended:true}));
3、node服务端的后台页面显示是源码的形式显示出来
加上这个,就可以让页面显示出来,而不是以源码的形式显示出来
4、node-mysql防止SQL注入
方法一:对传入的参数进行编码:
(1)mysql.escape(param)
(2)connection.escape(param)
(3)pool.escape(param)
方法二:使用sql语句的使用使用?
方法内部会自动对参数进行编码
方法三:mysql.format(sql,参数数组)