Node.js(七)MySql+ajax
Api.js
const express=require("express");
const router=express.Router();
const mysql = require('mysql')
const mysqlutil=require("./mysql"); let pool=mysql.createPool({
host:"localhost", //主机
user:"root", //用户名
password:"123456", //密码
database:"gomall" //数据库,port可以省去
});
function add(bookList){
let sql="insert into book set ?";
pool.getConnection((connErr,conn)=>{ //获取连接对象
pool.query(sql,bookList,(err,results)=>{//执行添加,指定参数对象
if(err) throw err; //如果有错误,则抛出异常
console.log(results); //输出结果
conn.release(); //释放连接
//process.exit(1); //关闭应用
});
});
} //查询所有
router.get("/",(req,res,next)=>{
pool.getConnection((connErr,conn)=>{ //获取连接对象
pool.query("select * from book",(err,results)=>{//执行查询
if(err) throw err; //如果有错误,则抛出异常
console.log(JSON.parse(JSON.stringify(results))); //转换并输出查询结果
conn.release(); //释放连接
res.json({status:"ok","data":results})
});
});
}); //添加
router.post("/",(req,res,next)=>{
let book=req.body;
console.log(book);
let msg="";
let sql="insert into book set ?";
pool.getConnection((connErr,conn)=>{ //获取连接对象
pool.query(sql,book,(err,results)=>{//执行添加,指定参数对象
if(results.affectedRows>0){
msg="添加成功!";
}else{
msg="添加失败!";
}
res.json({status:"ok","data":msg})
conn.release(); //释放连接
});
});
}) //Delete
router.delete("/:id",(req,res,next)=> {
let id=parseInt(req.params.id);
let sql="delete from book where id=?";
pool.getConnection((connErr,conn)=>{ //获取连接对象
pool.query(sql,id,(err,results)=>{//执行查询
if(err) throw err; //如果有错误,则抛出异常
if(results.affectedRows===1){ //如果影响行数为1
console.log("删除成功");
res.json({status:"ok","data":"删除成功"})
}
else{
console.log("删除失败");
}
conn.release(); //释放连接
});
});
}) //修改
router.post("/edit/:id",(req,res,next)=>{
let book=req.body;
let id=parseInt(req.params.id);
console.log(book);
console.log(id);
let sql="update book set ? where id=?";
pool.getConnection((connErr,conn)=>{ //获取连接对象
pool.query(sql,[book,id],(err,results)=>{//执行更新,指定参数
if(err) throw err; //如果有错误,则抛出异常
if(results.affectedRows===1){ //如果影响行数为1
console.log("修改成功");
res.json({status:"ok","data":"修改成功"})
}
else{
console.log("修改失败");
}
conn.release(); //释放连接
});
});
}) module.exports = router;
book.js
var express=require('express');
var router=express.Router(); router.get('/',function (req,res,next){
res.render("book",{});
}) module.exports = router;
app.js
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan'); var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var apiRouter = require('./routes/bookApi');
var bookRouter = require('./routes/book'); var app = express(); // view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs'); app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public'))); app.use('/index', indexRouter);
app.use('/users', usersRouter);
app.use('/api',apiRouter);
app.use('/', bookRouter); // catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
}); // error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {}; // render the error page
res.status(err.status || 500);
res.render('error');
}); module.exports = app;
book.ejs
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>图书管理系统</title>
</head>
<body>
<h1>图书管理系统</h1>
<div id="app">
<table width="800" border="1" style="margin: 0 auto">
<tr>
<th>编号</th>
<th>书名</th>
<th>封面</th>
<th>价格</th>
<th>作者</th>
<th>操作</th>
</tr>
<tr style="text-align: center" v-for="(book,i) in bookInfo">
<td>{{book.id}}</td>
<td>{{book.name}}</td>
<td>{{book.img}}</td>
<td>{{book.price}}</td>
<td>{{book.author}}</td>
<td>
<a href="" @click.stop.prevent="del(book)">删除</a>
<a href="" @click.stop.prevent="update(book)">编辑</a>
</td>
</tr>
</table>
<fieldset>
<legend>添加图书</legend>
<p>
<label>
书名
<input type="text" v-model="books.name">
</label>
</p>
<p>
<label>
封面
<input type="text" v-model="books.img">
</label>
</p>
<p>
<label>
价格
<input type="text" v-model="books.price">
</label>
</p>
<p>
<label>
作者
<input type="text" v-model="books.author">
</label>
</p>
<input type="hidden" v-model="id">
<p>
<button @click="save" type="button" id="btnadd">添加</button>
<button @click="edit" type="button" disabled id="btnsubmit">保存</button>
</p>
</fieldset>
</div>
</body>
<script src="/javascripts/vue/vue.min.js"></script>
<script src="/javascripts/axios/axios.js"></script>
<script>
var app = new Vue({
el: "#app",
data: {
state:0,
bookInfo: [],
id:"",
books: {name: "", img: "", price: "", author: ""},
},
methods: {
del(book) {
let id = (book.id);
if (confirm("你确定要删除吗?")) {
axios.delete("http://127.0.0.1:3000/api/"+id)
.then(res => {
console.log("删除成功!");
this.BookInfo();
})
.catch(err => {
console.log("删除失败!");
})
}
},
BookInfo() {
axios.get("http://127.0.0.1:3000/api", {})
.then(data => {
this.bookInfo = data.data.data;
}).catch(error => {
console.log(error);
});
},
save() {
axios.post("http://127.0.0.1:3000/api", this.books)
.then(res => {
console.log("添加成功!");
this.BookInfo();
app.books={name:"",img:"",price:"",author:""};
})
.catch(err => {
console.log("添加失败!");
})
},
update(book){
var btn=document.getElementById("btnsubmit");
var btnadd=document.getElementById("btnadd");
btn.removeAttribute('disabled');
btnadd.disabled=true;
this.id=book.id;
this.books.name=book.name;
this.books.img=book.img;
this.books.price=book.price;
this.books.author=book.author;
},
edit(){
axios.post("http://127.0.0.1:3000/api/edit/"+this.id, this.books)
.then(res => {
console.log("修改成功!");
this.BookInfo();
var btn=document.getElementById("btnsubmit");
var btnadd=document.getElementById("btnadd");
btn.disabled=true;
btnadd.removeAttribute('disabled');
app.books={name:"",img:"",price:"",author:""};
})
.catch(err => {
var btn=document.getElementById("btnsubmit");
var btnadd=document.getElementById("btnadd");
console.log("添加失败!");
btn.disabled=true;
btnadd.removeAttribute('disabled');
})
}
},
created: function () {
this.BookInfo();
}
})
</script>
</html>
Node.js(七)MySql+ajax的更多相关文章
- Node.js连接Mysql,并把连接集成进Express中间件中
引言 在node.js连接mysql的过程,我们通常有两种连接方法,普通连接和连接池. 这两种方法较为常见,当我们使用express框架时还会选择使用中间express-myconnection,可以 ...
- 使用node js 操作 Mysql 数据库
使用node js 操作 Mysql 数据库 http://www.nodejs.org/ //node js 数据库操作 MySQL //使用https://github.com/felixge/n ...
- Node.js 连接 MySQL 并进行数据库操作
Node.js 连接 MySQL 并进行数据库操作 按照这篇操作mysql的指引,我远程操作了我另一台电脑的mysql数据库. var mysql = require('mysql'); var c ...
- Node.js连接MySQL数据库及构造JSON的正确姿势
做一下整理,以前也很随意的引入包链接数据库,后来发现常常连接出问题,异常退出,后来使用在网上一个方法解决问题,网址由于书签丢失,抱歉不能引用了.再有就是简单的模块化下,使得目录合理点,再有就是说明一下 ...
- APNs功能之Node.js和Mysql应用总结
APNs功能之Node.js和Mysql应用总结 这篇文档主要是总结Node.js和Mysql的学习心得体会.当然也可以看作是此前所写的消息推送服务的续篇. 简单描述下应用背景,我们的应用需要实现苹果 ...
- node.js连接MySQL操作及注意事项
node.js作为服务端的js运行环境已经出现了有几年了,最近我有个朋友也在做这方面的开发,但是也是刚刚接触,遇到了很多坑.前几天他们在操作数据库的时候出现了点问题,后来我们一起看了看,其实都是nod ...
- node.js使用mysql模块的坑
之前用node.js写的订餐系统,很容易挂掉,一直也没想去解决它.今天看了一下,试了试,原因是在连接数据库的时候没有对error事件进行处理,导致程序一直挂在那里,需要重启服务才能正常使用. ...
- 分享Node.js + Koa2 + MySQL + Vue.js 实战开发一套完整个人博客项目网站
这是个什么的项目? 使用 Node.js + Koa2 + MySQL + Vue.js 实战开发一套完整个人博客项目网站. 博客线上地址:www.boblog.com Github地址:https: ...
- node.js链接mysql
node.js连接数据库有很多种,比如:mongoose,oracle,mysql...,我自己玩就选了一个我很熟悉的轻量级的mysql数据库尝试了一把,感觉不错. 首先要把mysql客户端安装好,官 ...
- Node.js之mysql增删改查
1.安装库 npm install mysql 2.编写db.js(用作公共模块) //连接MySQL数据库 var mysql = require("mysql"); var p ...
随机推荐
- 透过Redis源码探究Hash表的实现
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/667 本文使用的Redis 5.0源码 概述 我们在学习 Redis ...
- 报告指SpaceX估值已达到1000亿美元,埃隆马斯克以此回击其接受政府补贴的批判
SpaceX首席执行官埃隆-马斯克(Elon Musk)表示,名下的航天发射服务供应商市值已达到1000亿美元.该金额是根据上个月的评估报告确认的,标志着SpaceX在完成最新一轮融资,并筹集超过10 ...
- 题解【CodeForces 910A The Way to Home】
题目大意 一只青蛙现在在一个数轴上,它现在要从点 \(1\) 跳到点 \(n\) ,它每次可以向右跳不超过 \(d\) 个单位.比如,它可以从点 \(x\) 跳到点 \(x+a\)(\(1\le a\ ...
- php数组和对象相互转换
function arrayToObject($e){ if( gettype($e)!='array' ) return; foreach($e as $k=>$v){ if( gettype ...
- V8中的快慢数组(附源码、图文更易理解😃)
接上一篇掘金 V8 中的快慢属性,本篇分析V8 中的快慢数组,了解数组全填充还是带孔.快慢数组.快慢转化.动态扩缩容等等.其实很多语言底层都采用类似的处理方式,比如:Golang中切片的append操 ...
- 我与Apache DolphinScheduler社区的故事
我与DolphinScheduler社区的故事 Apache DolphinScheduler 是一个开源的分布式去中心化.易扩展的可视化DAG大数据调度系统. 于2017年在易观数科立项,2019年 ...
- C#.NET ORM FreeSql 读取使用 US7ASCII 的 Oracle 数据库中文显示乱码问题
前言 关于 Oracle US7ASCII 中文乱码的问题,Ado.Net 和 Odbc 无法解决.包括最新的.Net Core..NET6..NET7 都无法解决这个问题. FreeSql 对 Or ...
- Github文件在线加速下载
众所周知,GitHub是一个巨大的开源宝库,以及程序员和编程爱好者的聚集地,诸多优秀的开源项目全部都是位于GitHub上.但是每当我们看到优秀的开源项目,准备去下(bai)载(piao)时,会发现速度 ...
- 小A的树 - 树形DP
题面 1 9 4 4 1 1 5 1 2 3 2 3 6 6 7 6 8 9 6 0 1 0 1 0 0 1 0 1 3 2 7 3 4 0 9 5 YES YES NO NO 题解 n <= ...
- java数组---稀疏数组与数组之间的相互转化
public static void main(String[] args) { int[][]array1=new int[11][11]; array1[1][2]=1; array1[2][3] ...