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);
mysql 数据库
最新推荐文章于 2024-04-26 16:04:17 发布