vue-server,保存图书的代码
server/controllers/addbook.js
const https = require('https')
const {mysql} = require('../qcloud')
// 新增图书:获取豆瓣信息,入库
// https://developers.douban.com/wiki/?title=book_v2#get_isbn_book
// https://api.douban.com/v2/book/isbn/9787536692930
module.exports = async(ctx) => {
const {isbn, openid} = ctx.request.body
if(isbn && openid) {
// 查询是否已经有这本书了
const findRes = await mysql('books').select().where('isbn',isbn)
if(findRes.length){ // 已经存在数据,直接返回
ctx.state = {
code:-1,
data:{
msg:'这本书已经存在了'
}
}
return
}
let url = 'https://api.douban.com/v2/book/isbn/'+isbn
const bookinfo = awat getJSON(url)
const rate = bookinfo.rating.avarage
const {title,image,alt,publisher,summary,price} = bookinfo
const tags = res.tags.map(v=>{
return '${v.title} ${v.count}'
}).join(',') // tag:科幻 100, 小说300
const auther = bookinfo.auther.join(',')
try{
// 插入数据,异步过程通过await改成同步的过程
await mysql('books').insert({
isbn,openid,rate,title,image,alt,publisher,summary,price,tags,author
})
ctx.state.data = {
title,
msg:'添加成功:success'
}
} catch(){
ctx.state = {
code:-1,
data:{
msg:'新增失败:'+ e.sqlMessage
}
}
}
}
}
function getJSON(url) {
return new Promise((resolve, reject){
https.get(url, res=>{
let urlData = ''
res.on('data', data=>{
urlData += data
})
res.on('end', data=>{
const bookinfo = JSON.parse(urlData)
if(bookinfo.title){
resolve(bookinfo)
}else {
reject(bookinfo)
}
})
})
})
}