我转过几个弯 绕过那个小雨楼
拿着蒲扇摆着衣衫渡着紧箍咒
不问天涯不停留 喝过几壶酒
不过年少白头道义放胸口
倘若明天之后 遥看前尘剑封侯
似那天上神仙无所求
朝朝暮暮君如梦醒十分不为何理由
是真是假是惶恐是无休
路过这风雨花满楼 片刻都不停留
我本这书生进京赶考留下许多愁
你问有没有时候 我叹这天道默悠悠
能否与我一醉方休
又过了几个弯 算尽天量道莫慌
踏这田园闻这芳草香
跌跌撞撞仗剑天涯折煞不枉无笔良
是梦是幻是温柔是家乡
路过这风雨花满楼 片刻都不停留
我本这书生进京赶考留下许多愁
你问有没有时候 我叹这天道默悠悠
能否与我一醉方休
路过这风雨花满楼 片刻都不停留
我本这书生进京赶考留下许多愁
你问有没有时候 我叹这天道默悠悠
能否与我一醉方休
谁能与我一醉方休
koa框架8 基础入门之数据库
node连接数据库需要安装一个插件“mysql”
npm i mysql
安装完毕后我们需要引入这个插件,并且配置数据库的基础信息:
const mysql = require("mysql");
mysql.createConnection({
host: "localhost",
user: "root",
password: "123456",
database: "node"
});
host为连接地址,本地就写localhost
user为数据库用户名
password为用户密码
database为数据库的名字
数据库配置完毕后,我们需要对数据库的数据进行获取,这里就需要使用query
方法。
mysql.query("INSERT INTO user_table (user,pass,age) VALUES('mu','123456',18)", (err, data) => {
if (err) {
console.log(err);
} else {
console.log(data);
}
});
query的第一个参数为sql语法,第二个为回调函数,回调函数有两个参数,第一个err为错误信息,第二个为data,成功后返回给你的数据。
sql注入
一般情况下,我们对数据库写入的信息都是需要动态获取的,并不是写死的,所以有可能会这样写:
const user = "mu",
pass = "123456",
age = 18;
mysql.query(`INSERT INTO user_table (user,pass,age) VALUES(${user},${pass},${age})`, (err, data) => {
if (err) {
console.log(err);
} else {
console.log(data);
}
});
使用es6的语法,将变量传到字符里,但是这样会带来一个问题,如果对方提交的内容也是sql语法,这就会导致恶意代码破坏你数据库,这就是sql注入攻击了。
解决办法也有,我们可以使用占位字符的方式,让对方sql语法不和我们后台语法混在一起。
const user = "mu",
pass = "123456",
age = 18;
mysql.query(`INSERT INTO user_table (user,pass,age) VALUES(?,?,?)`, [user, pass, age], (err, data) => {
if (err) {
console.log(err);
} else {
console.log(data);
}
});
query里面的参数,全部用?
问好代替,在第二个参数传一个数组,数组里面依次存放对应的变量数据,第三个才是回调。
这样我们的语法不会被提交上来的数据影响。
连接池
我们之前连接数据库使用的是createConnection
方法,这种方法其实并不是很好,因为他是一个单线程,也就是如果有两个用户,他们没办法同时一起获取数据,必须要等第一个用户连接服务器获取数据后,才能进行第二个。
所以有了一个想法,一开始我们就开多个连接在那,有需要就拿去一个,用完了再还回来,这样既能支持多个同时,也能减少用户等待上一位的请求等待时间。
这样的方式叫连接池
我们将连接方法改为:
mysql.createPool({
host: "localhost",
user: "root",
password: "123456",
database: "node"
});
这样就行了。
连接池默认是10个连接,一般不用改这个配置,如果需要改,你可以给配置对象如下:
mysql.createPool({
host: "localhost",
user: "root",
password: "123456",
database: "node",
connectionLimit: 15
});
connectionLimit
可以配置连接数量,一般不建议太少,也不能太多
异步数据库
即便是使用了连接池,mysql性能也不能说是最好的,于是有了异步的mysql
安装插件:promise-mysql
npm i promise-mysql
const mysql = require("promise-mysql");
(async () => {
let db = await mysql.createPool({
host: "localhost",
user: "root",
password: "123456",
database: "node",
connectionLimit: 15
});
await db.query("UPDATE user_table SET name=? WHERE ID=1")
})()
由于是异步操作,我们使用async将异步语法改为同步语法,所有的数据库查询都是异步,我们可以使用awite。
评论(0)