mysql 数据库

const Koa = require("koa");
const Router = require("koa-router");
const static = require("koa-static");
const views = require("koa-views");
// let  data = require("./data/data.json");
const mysql = require("mysql2")  //mysql2框架用来连接mysql数据库

let app   = new Koa();
let router = new Router();

// 配置模板 相当一中间件,告诉他要去加载谁
app.use(views(__dirname +"/views",{
    extension:"pug",
}))
// 配置模板加载静态文件 js cs ..
app.use(static(__dirname +"/static"))


// 配置和数据库之间的信息链接
const connection = mysql.createConnection({
    host:"localhost",
    user:"root",
    password:"123321",
    database:"js05",
    charset:"utf8",
})


// //adduser用户给数据库添加数据
router.get("/adduser",async ctx=>{  //ctx 客户端请求和服务器回应的数据的集合
    let username =  ctx.query.username || "无"   //getData获取数据
    let hobby = ctx.query.hobby || "篮球";
    let age = ctx.query.age || 20;   // 以上相当一载体
    let mydata;
                            // 字段             为了防止用户随意添加内容用站位符(有位置没数据)
    let sql= "INSERT INTO user (name,age,hobby) VALUES (?,?,?)" //操作查询语句 要干什么  放到外面一遍灵活操作 

    try{    //rows 自定义  数组结构赋值对应下标,对象结构赋值时对应名称
        // 解构赋值          await 防止回调地狱  现在fields现在暂时不用 先把rows解构出来给mydata 写成全局不然找不到
        let [rows,fields] = await connection.promise().query(sql,[username,age,hobby]);
        mydata = rows;                                        //传参:第二个参数组形式传进去 如果用户传递的时候sql语句
        // console.log(mydata)                                   //传递不过来,只接受数据变相的进行了安全过滤
    }catch(err){  //如果报错
        console.log(err)
    }
    // 没有数据就按默认值来如果有数据按照客户传递的数据
    //在地址栏输入自定义内容 http://localhost:8088/adduser?username=猪&hobby=吃age=18  查看兔子会自动更新
    ctx.body = mydata; // 输出到页面
    // await一定带上
    //await ctx.render("index",{
    //     mydata,
    // })
  })    
   
//   getData获取数据库的数据
  router.get("/getData",async ctx=>{
    let mydata;
    //  = <> AND OR                                   
    // 年龄大于20 且姓麻的数据                         = 等号用LIKE代替 名用%代替 
    // let sql= "SELECT * FROM user WHERE age>2 AND name LIKE '麻%' " 
    
    // 按年龄排序的数据        名称         条件      ASC 正序(可省)  DESC倒序
    // let sql = "SELECT * FROM user WHERE age>15 ORDER BY age DESC"
    // 排序前后端都能干,数据量大时后端来做           固定写法

    // 分页限制查询 LIMIT 从1开始不包括1 显示2条
    // let sql = "SELECT * FROM user LIMIT 1,2"
    
    // 别名 AS好处起的时候见名之意 用时候给他改短点方便    
    // let sql = "SELECT u.name,u.age FROM user AS u"  //通过as 改名为u 直接用调用

    // 将两个表的数据连接   
    //              ON:表之间的数据连接 
    // 连表查询(不写别名也行)               附表放前面    LEFT JOIN  主表放后面  把苹果/华为/三星分别写进 id为2/3/4
    let sql = "SELECT u.name,p.pname FROM products AS p LEFT JOIN user AS u ON p.uid=u.id"
                 // 需要那个数据提取那个数据                                            //   
    try{
        // 解构赋值                                    //这里就不用传第二个参数
        let [rows,fields] = await connection.promise().query(sql);
        mydata = rows;
    }catch(err){  //如果报错
        console.log(err)
    }
    ctx.body = mydata; // 输出到页面
    // 
    //await ctx.render("index",{
    //     mydata,
    // })
   
  })  
app.use(router.routes()); //启用
app.listen(8088);
// 下午课堂练习:把新闻列表数据,跟换成mysql版本{新闻列表中的东西放}
//   1.新闻呈现  2.详情 3,分页const Koa = require("koa");
const Router = require("koa-router");
const static = require("koa-static");
const views = require("koa-views");
// let  data = require("./data/data.json");
const mysql = require("mysql2")  //mysql2框架用来连接mysql数据库

let app   = new Koa();
let router = new Router();

// 配置模板 相当一中间件,告诉他要去加载谁
app.use(views(__dirname +"/views",{
    extension:"pug",
}))
// 配置模板加载静态文件 js cs ..
app.use(static(__dirname +"/static"))


// 配置和数据库之间的信息链接
const connection = mysql.createConnection({
    host:"localhost",
    user:"root",
    password:"123321",
    database:"js05",
    charset:"utf8",
})


// //adduser用户给数据库添加数据
router.get("/adduser",async ctx=>{  //ctx 客户端请求和服务器回应的数据的集合
    let username =  ctx.query.username || "无"   //getData获取数据
    let hobby = ctx.query.hobby || "篮球";
    let age = ctx.query.age || 20;   // 以上相当一载体
    let mydata;
                            // 字段             为了防止用户随意添加内容用站位符(有位置没数据)
    let sql= "INSERT INTO user (name,age,hobby) VALUES (?,?,?)" //操作查询语句 要干什么  放到外面一遍灵活操作 

    try{    //rows 自定义  数组结构赋值对应下标,对象结构赋值时对应名称
        // 解构赋值          await 防止回调地狱  现在fields现在暂时不用 先把rows解构出来给mydata 写成全局不然找不到
        let [rows,fields] = await connection.promise().query(sql,[username,age,hobby]);
        mydata = rows;                                        //传参:第二个参数组形式传进去 如果用户传递的时候sql语句
        // console.log(mydata)                                   //传递不过来,只接受数据变相的进行了安全过滤
    }catch(err){  //如果报错
        console.log(err)
    }
    // 没有数据就按默认值来如果有数据按照客户传递的数据
    //在地址栏输入自定义内容 http://localhost:8088/adduser?username=猪&hobby=吃age=18  查看兔子会自动更新
    ctx.body = mydata; // 输出到页面
    // await一定带上
    //await ctx.render("index",{
    //     mydata,
    // })
  })    
   
//   getData获取数据库的数据
  router.get("/getData",async ctx=>{
    let mydata;
    //  = <> AND OR                                   
    // 年龄大于20 且姓麻的数据                         = 等号用LIKE代替 名用%代替 
    // let sql= "SELECT * FROM user WHERE age>2 AND name LIKE '麻%' " 
    
    // 按年龄排序的数据        名称         条件      ASC 正序(可省)  DESC倒序
    // let sql = "SELECT * FROM user WHERE age>15 ORDER BY age DESC"
    // 排序前后端都能干,数据量大时后端来做           固定写法

    // 分页限制查询 LIMIT 从1开始不包括1 显示2条
    // let sql = "SELECT * FROM user LIMIT 1,2"
    
    // 别名 AS好处起的时候见名之意 用时候给他改短点方便    
    // let sql = "SELECT u.name,u.age FROM user AS u"  //通过as 改名为u 直接用调用

    // 将两个表的数据连接   
    //              ON:表之间的数据连接 
    // 连表查询(不写别名也行)               附表放前面    LEFT JOIN  主表放后面  把苹果/华为/三星分别写进 id为2/3/4
    let sql = "SELECT u.name,p.pname FROM products AS p LEFT JOIN user AS u ON p.uid=u.id"
                 // 需要那个数据提取那个数据                                            //   
    try{
        // 解构赋值                                    //这里就不用传第二个参数
        let [rows,fields] = await connection.promise().query(sql);
        mydata = rows;
    }catch(err){  //如果报错
        console.log(err)
    }
    ctx.body = mydata; // 输出到页面
    // 
    //await ctx.render("index",{
    //     mydata,
    // })
   
  })  
app.use(router.routes()); //启用
app.listen(8088);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jason–json

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值