express 框架下使用mysql 保存页面抓取的数据
来源:互联网 发布:java set集合 编辑:程序博客网 时间:2024/06/06 02:18
通过 nodejs 抓取的页面信息进行解析保存到数据库
抓取页面功能http://blog.csdn.net/black_wizard/article/details/51701101
保存到数据库
var itemDO = json_obj.itemDO;var date = new Date();var curtime = date.getTime()/1000;// 当前时间戳itemDO['time'] = curtime;itemDO['fromurl'] = response.request.uri.href;//抓取的页面地址goodsModel.add(res,itemDO, 'pc');//pc端和移动端抓取的页面解析规则不同//itemDO保存成功后,执行var skuList = json_obj.valItemInfo.skuList;var skuMap = json_obj.valItemInfo.skuMap;var len = skuList.length,i = 0;for (var key in skuList) { skuList[key]['itemId'] = json_obj.itemDO.itemId; skuList[key]['stock'] = skuMap[';'+skuList[key]['pvs']+';']['stock']; skuList[key]['price'] = skuMap[';'+skuList[key]['pvs']+';']['price']; skuList[key]['priceCent'] = skuMap[';'+skuList[key]['pvs']+';']['priceCent']; skusModel.add(res,skuList[key], 'pc'); //保存规格}CRUD语句
// CRUD SQL语句var goods = { insert:'INSERT INTO goods(itemId, json_data,type,quantity,title,createtime,fromurl) VALUES(?,?,?,?,?,?,?)', update:'update goods set json_data=?,quantity=?,title=?,updatetime=? where itemId=?', delete: 'delete from goods where itemId=?', queryById: 'select * from goods where itemId=?', queryAll: 'select * from goods'};module.exports = goods;
// goodsModel// 实现与MySQL交互var mysql = require('mysql');var $conf = require('../conf/db');var $util = require('../util/util');var $sql = require('./goodsSqlMapping');// 使用连接池,提升性能var pool = mysql.createPool($util.extend({}, $conf.mysql));// 向前台返回JSON方法的简单封装var jsonWrite = function (res, ret) { if(typeof ret === 'undefined') { res.json({ code:'1', msg: '操作失败' }); } else { res.json(ret); }};module.exports = { add: function (res,params,type) { pool.getConnection(function(err, connection) { // 获取前台页面传过来的参数var str = JSON.stringify(params); // 建立连接,向表中插入值 // 'INSERT INTO user(itemId, json_data) VALUES(?,?)', connection.query($sql.insert, [params.itemId, str,type,params.quantity,params.title,params.time,params.fromurl], function(err, result) { if(result) { result = { status: 1, msg:'增加成功' }; }else{ result = {status:0,msg:err};} // 以json形式,把操作结果返回给前台页面 // jsonWrite(res, result); // 释放连接 connection.release(); }); }); },queryAll:function(req, res, next){return new Promise(function(resolve, reject){ pool.getConnection(function(err, connection) { var queryAll = connection.query($sql.queryAll, function(err, result) { connection.release(); if(!result){ reject({ result_code:-1, status:0, msg:'获取商品列表失败!' }); return; }else{ resolve(result); } }); }); });}};
由于nodejs 是异步编程模式, 不会等待成功保存到数据库后再执行skus的保存操作,对goods的保存结果无法判断,发现可以使用Promise、根据异步调用的返回结果(resolve正确返回结果和reject错误处理))判断接下来的操作..queryAll 就是采用Promise模式
参考promise http://liubin.org/promises-book/#chapter2-how-to-write-promise
var promise = new Promise(function(resolve, reject){ goodsModel.queryAll(req, res, next).then(function(result){//result即查询结果 result.forEach(function(item){ console.log(item);res.json(item) }); }).catch(function(err){// err 即{result_code:-1,status:0, msg:'获取商品列表失败!'} reject(err); }); });
0 0
- express 框架下使用mysql 保存页面抓取的数据
- 使用Jsoup 抓取页面的数据
- Android 使用Jsoup 抓取页面的数据
- 使用Jsoup 抓取页面的数据
- 使用Jsoup 抓取页面的数据
- android 使用Jsoup 抓取页面的数据
- 使用Jsoup 异步抓取页面的数据
- 使用Jsoup 抓取页面的数据
- 使用Jsoup 抓取页面的数据
- 使用Jsoup 抓取页面的数据
- 使用Jsoup 抓取页面的数据
- 使用Jsoup 抓取页面的数据
- 使用Jsoup 抓取页面的数据
- 使用Jsoup抓取页面的数据
- 使用Jsoup 抓取页面的数据
- 使用Jsoup 抓取页面的数据
- 使用Jsoup 抓取页面的数据
- 使用Jsoup 简单抓取页面的数据
- 对近期自我状态的反思及总结
- iis7多个域名绑定同一物理路径
- Jmeter(六)-关联设置
- exe 运行完,删除自己
- 模型各层数据和参数可视化
- express 框架下使用mysql 保存页面抓取的数据
- caffe基础(4):其他常用层及参数
- ios Symbol(s) not found for architecture arm64总结 含隐藏错误cocoapods
- Mybatis中运用小技巧(三)外键与对象的关系
- Jmeter(七)-参数化
- 动作cc.Action
- caffe模型可视化
- UML类图符号 各种关系说明以及举例(转载)
- jmeter(八)-JDBC请求(sqlserver)