node链接数据库并查询
后台接口跨域
要在后端代码中允许跨域访问,这个是整个从前端到数据库的过程
app.all('*', function (req, res, next) { //设置跨域访问
//设置允许跨域的域名,*代表允许任意域名跨域
res.header("Access-Control-Allow-Origin", "*");
//允许的header类型
res.header("Content-Type", "application/json;charset=utf-8");
// 设置请求头中允许携带的参数
res.header("Access-Control-Allow-Headers", "Content-Type,request-origin");
// 允许客户端携带证书式访问。保持跨域请求中的Cookie。注意:此处设true时,Access-Control-Allow-Origin的值不能为 '*'
res.header("Access-Control-Allow-Credentials", "true");
res.header("Access-control-max-age", 1000);
//跨域允许的请求方式
res.header("Access-Control-Allow-Methods", "DELETE,PUT,POST,GET,OPTIONS");
next();
});
node数据库连接
1.
安装‘mysql’
npm i mysql -S
2.
配置
var mysql = require('mysql');//引入
//设置属性
var conPool = mysql.createPool({
host: '127.0.0.1', //主机ip
port: 3306,//端口
user: 'root', //用户名
password: '123456', //数据库密码
database: "school", //数据库名称
connectionLimit: 10,// "指定连接池中最大的链接数,默认是10",
queueLimit: 10,// "指定允许挂起的最大连接数,如果挂起的连接数超过该数值,就会立刻抛出错误,默认属性值为0,代表不允许被挂起的最大连接数",
multipleStatements: true //是否允许多条语句查询,一般允许
});
//查询方法
module.exports = function exec(sql, params, callBack) {
conPool.getConnection((err, coon) => {
if (err) {
console.log('链接失败');
return
} else {
coon.query(sql, params, callBack)
coon.release()//释放链接池
//不加return报错原因 请求头发送到客户端后无法设置请求头
return //服务器在每次响应后添加return,避免多余响应。
}
})
}
这里面用到的是链接池的方式,因为单条链接查询的时候查询量比较大的时候,有的时候会报错,并且还消耗性能,有兴趣的可以去了解连接池的作用
- 释放连接对象(放回连接池)
connection.release();
- 从连接池中移除连接对象
connection.destory();
- 关闭该连接池
pool.end();
//引用封装数据库
const {exec}=require("./DB")
app.get('/', (req, res) => {
//因为调用exec返回的是promise对象,所以需要then的回调函数取值
exec('select * from user_info where 1=1').then((data)=>{
return data
})
res.send('11')
})
前端渲染
用的是axios请求 另外记住地址前面要加http不然会报错
axios.get('http://192.168.0.102:3000/').then(res => {
box.innerHTML = res.data[0].user_name
})