一、在项目中上传文件(图片)
1、将图片上传后保存到数据库中
(1)数据库中保存图片的什么信息:将图片在服务器中的存储路径保存到数据库中
(2)修改数据模型:
(3)图片上传到服务器,再从服务器保存到数据库(图片的保存信息+其他的表单数据)
A、先上传图片,将图片在服务器上存储地址返回客户端
B、将服务器返回的图片的存储地址和其他的表单信息一起发送的服务器端,由服务器存储到数据库中
(4)上传接口:接收上传的图片保存到指定的路径下,将存储路径和服务器地址拼接成字符串返回给客户端
(5)将图片地址和其他表单数据进行打包
2、从数据库中读取图片的信息,让图片在表格中显示出来
//与数据库进行连接
const sequelize = require('sequelize');
const db = new sequelize('dbms','root','128945566',{
host: 'localhost',
port: 3306,
dialect: 'mysql',
pool: {
max: 10,
min: 3,
idle: 10000
},
debug: true
})
module.exports = db;
const Sequelize = require('sequelize');
const db = require('../config/dbbook');
//定义模型,实现ORM
const BookModel = db.define('bookinfo',{
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
//field: 'id'
},
isbn: {
type: Sequelize.CHAR(13),
allowNull: false
},
bookName: {
type: Sequelize.STRING(200),
allowNull: false,
field: 'name'
},
author: {
type: Sequelize.STRING(100),
allowNull: false
},
press: {
type: Sequelize.STRING(100),
allowNull: false
},
price: {
type: Sequelize.DECIMAL(7,2),
allowNull: false
},
pubDate: {
type: Sequelize.DATE,
allowNull: false,
field: 'pubdate'
},
imgPath: {
type: Sequelize.STRING(255),
field: 'imgpath'
}
},{
freezeTableName: true,
timestamps: false
});
module.exports = BookModel;
const Sequelize = require('sequelize')
const Book = require('../model/bookModel')
const Op = Sequelize.Op; //导入Sequelize的查询操作符
//定义对象,用于完成CRUD操作
const bookOption = {
//查询所有
getBooks: async function(){ //函数返回值是Promise对象
let result = Book.findAll({
raw: true //不显示时间戳
})
return result
},
//增加图书
addBook: async function(params){
let result = Book.create({
isbn: params.isbn,
bookName: params.bookName,
author: params.author,
press: params.press,
price: params.price,
pubDate: params.pubDate,
imgPath: params.imgPath
})
return result;
},
//删除图书
delBook: async function(bid){
let result = Book.destroy({
where: {
id: bid
}
})
return result;
},
//批量删除图书
batchBook: async function(id_list){
let result = Book.destroy({
where:{
id: {
[Op.in]:id_list //将id在id_list集合中的记录删除
}
}
})
},
//更新图书信息
updateBook: async function (params){
let result = Book.update({
isbn: params.isbn,
bookName: params.bookName,
author: params.author,
press: params.press,
price: params.price,
pubDate: params.pubDate
},{
where:{
id: params.id
}
})
}
}
module.exports = bookOption;
const express = require('express');
const fs = require('fs');
const formidable = require('formidable');
const router = express.Router()
//导入bookOption对象
const bookOption = require('../../db/crud/bookOption')
/*
增加图书:http://localhost:8089/bookapi/add
*/
router.post('/add',(req, res) => {
let params = {
isbn: req.body.isbn,
bookName: req.body.bookName,
author: req.body.author,
press: req.body.press,
price: req.body.price,
pubDate: req.body.pubDate,
imgPath: req.body.imgPath
}
bookOption.addBook(params).then((data)=>{
res.send({
code: data,
msg: '添加成功!'
})
})
})
/*
删除图书:http://localhost:8089/bookapi/del
*/
router.delete('/del',(req, res) => {
bookOption.delBook(req.body.id).then((data)=> {
res.send({
code: data,
msg: '删除成功!'
})
})
})
/*
批量删除:http://localhost:8089/bookapi/batch
*/
router.delete('/batch',(req,res)=>{
//1.获取id构成的字符串
let idStr = req.body.ids
//2.将字符串分隔成数组
let id_list = idStr.split(',');
bookOption.batchBook(id_list).then((data)=>{
res.send({
code: data,
msg: '删除成功!'
})
})
})
/*
更新图书:http://localhost:8089/bookapi/update
*/
router.put('/update',(req, res) => {
let params = {
id: req.body.id,
isbn: req.body.isbn,
bookName: req.body.bookName,
author: req.body.author,
press: req.body.press,
price: req.body.price,
pubDate: req.body.pubDate
}
bookOption.updateBook(params).then((data)=>{
res.send({
code: data,
msg: '更新成功!'
})
})
})
/*