首页 > 数据库 >Node.js(七)MySql+ajax

Node.js(七)MySql+ajax

时间:2022-09-21 09:13:22浏览次数:77  
标签:Node err res app ajax book MySql var id

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,err,res,app,ajax,book,MySql,var,id
From: https://www.cnblogs.com/zsbb/p/16714370.html

相关文章

  • Node.js(六)MongoDB
    student.jsvarexpress=require('express');varrouter=express.Router();const_=require("lodash");const{MongoClient}=require("mongodb");//依赖Mong......
  • nodejs抓取接口数据(axios)
     demo:varaxios=require("axios");varfs=require("fs");varnodeschedule=require("node-schedule");varhotListUrl="https://weibo.com/ajax/side/hotS......
  • Node.js 面试题 All In One
    Node.js面试题AllInOneNode.js应用领域BFFCLI前端基建工具库爬虫BFFPattern:BackendsForFrontends用于前端的后端模式https://samnewman.io/patterns/......
  • MySQL数据库笔记
    1.操作数据库1.1创建数据库createdatabase数据库名如果想数据库没有就创建,有就不创建可以执行这句话sqlcreatedatabaseifnotexists数据库名1.2删除数据库......
  • [MySQL]解决mysql数据库连接报错:is not allowed to connect to this mysql server
    这是因为mysql数据库只允许自身所在的本机器连接,不允许其他机器远程连接。如果是root用户,执行sql语句:usemysql;selecthostfromuserwhereuser='root';如果是l......
  • mysql5.7安装和配置
    mysql下载官网:https://dev.mysql.com/downloads/我是用的是用压缩包然后进行配置下载地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-winx64.zip......
  • vue.js下载依赖包node_modules
    https://blog.csdn.net/qq_36509946/article/details/118878026node_modules  npm加载的项目依赖模块 在很多时候,我们要拷贝或上传一份vue的代码时,通常会删掉......
  • mysql(9)存储引擎
    MySQL体系结构存储引擎简介存储引擎是基于表的,不是基于数据库的,每个表可以单独指定存储引擎InnoDBInnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5之......
  • win10 Install Mysql57
    1、下载ZIP安装包2、新建my.ini配置文件,复制如下内容[mysqld]port=3306......
  • ajax+tp5 详情页跳转/实现登录--注册
      需求:点击资料下载后   跳转到登录页登录成功下载资料,  有账号即可登录  无账号即需注册!<formaction=""method="POST"role="form"class="logi......