vue-server,根据图书isbn码,获取图书信息,并保存到mysql数据库


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)
				}
			})
		})
	})
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值