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 ...
随机推荐
- 转:windows下定时执行备份数据库
上一篇写了linux下定时任务,这一篇转发一个windows下定时备份数据库. 第一种:新建批处理文件 backup.dat,里面输入以下 net stop mysql xcopy "C:\ ...
- ERROR: null value in column "name" of relation "res_company" violates not-null constraint
1 # 创建res.company公司信息的时候,发现它执行了两次create()方法,并且第二次调用create,传了一个[{}]做为参数 2 # 原因是,你创建res.company的时候并没有指 ...
- MAUI Blazor 权限经验分享 (定位,使用相机)
入门文章 Blazor Hybrid / MAUI 简介和实战 https://www.cnblogs.com/densen2014/p/16240966.html 在 Mac 上开发 .NET MA ...
- 完整代码:安卓小软件“CSV联系人导入导出工具”
完整代码:安卓小软件"CSV联系人导入导出工具" 开发了一个安卓小软件"CSV联系人导入导出工具",欢迎测试.本软件可以帮你快速备份和恢复联系人,不用担心号码遗 ...
- Flask 运行报错 HTTPStatus.BAD_REQUEST This site can’t provide a secure connection
这时候将访问的url,从https换成http 就好啦!!!!!!!!!!!!!
- java-循环的应用环境以及数组的创建
1.三种循环结构的更佳适用情况: 1)while:"当..."循环 2)do...while:"直到..."循环 要素1与要素3相同时首选do...while ...
- Apple Music 免费试用 2 个月
下载地址:https://redeem.apple.com/am-genshin-impact-2mo-zh-cn?origin=&locale=zh-CN 使用指南 打开链接,点击" ...
- C# for循环创建多线程
这里仅讨论Task多线程编程,不讨论其他可以使用多线程的情况,比如Beginxxx,Thread等 一般情况下,如果有多个线程需要同是启动,且每个线程中使用了集合collection中的序号. 比如参 ...
- git hooks在业务中的使用
起因 最近公司项目发生了一起线上事故,最后排查下来是配置文件的问题.项目里application.yml文件内会用@build.time@记录打包时的时间,但是这个写法是build-helper-ma ...
- LibTorch | 使用神经网络求解一维稳态对流扩散方程
0. 写在前面 本文将使用基于LibTorch(PyTorch C++接口)的神经网络求解器,对一维稳态对流扩散方程进行求解.研究问题参考自教科书\(^{[1]}\)示例 8.3. 目录 0. 写在前 ...