从网站抓取到内容后,存入数据库。一直提示有问题,一开始以为是字段问题,我就写死了存入MYSQL的数据。成功运行了,但一看数据库:文章列表没问题(21条),但文章正文存入了1212条记录……为什么会这样?
数据库设计:
news_list表:
| newsId | int(255) | 文章分类的ID,主键
| title | varchar(255) | 文章主题
| time | varchar(20) | 文章发布时间
| curl | varchar(255) | 文章链接
| created_time | varchar(20) | 文章时间戳
news_detail表:
| newsId | int(255) | 文章分类的ID,主键
| content | varchar(255) | 文章内容
all.js
var newsList; var newsDetail = {}; async.series([ // 获取新闻列表 function(done) { read.newsList(config.sinaN.url, function(err, list) { newsList = list; done(err); }); }, // 保存新闻列表1 function(done) { save.newsList(newsList, done); }, //保存新闻正文 function (done) { async.eachSeries(newsList, function (n, next) { save.newsDetail(n.url, function (err, list) { newsDetail = list; next(err); }); }, done); }, ], function(err) { if (err) console.error(err.stack); console.log('完成'); process.exit(0); });
read.js没问题
save.js
exports.newsList = function(list, callback) { debug('保存新闻列表到数据库中: %d', list.length); async.eachSeries(list, function(item, next) { // 将发布时间转成字符串 var ttime = item.time; ttime = ttime.replace(/[^0-9:]/mg, '-').replace(/\-\-/mg, ' '); var created_time = new Date(ttime).getTime() / 1000; // 查询新闻是否已存在 db.query('SELECT * FROM `news_list`WHERE `created_time`=? LIMIT 1', [created_time], function(err, data) { if (err) return next(err); if (Array.isArray(data) && data.length >= 1) { // 新闻已存在,转到下一条 db.query('UPDATE `news_list` SET `title`=?, `url`=?, `time`=? WHERE `created_time`=?', [item.title, item.url, item.time, created_time], next); } else { // 新闻不存在,添加 db.query('INSERT INTO `news_list`(`title`, `url`, `time`, `created_time`) VALUES (?, ?, ?, ?)', [item.title, item.url, item.time, created_time], next); } }); }, callback); }; /** * 保存新闻内容 */ var test exports.newsDetail = function(list, callback) { debug('保存文章到数据库中: %d', list.length); async.eachSeries(list, function(item, next) { // 查询文章是否已存在 db.query('SELECT * FROM `news_detail` ', function(err, data) { if (err) return next(err); test='1111111111111'; db.query('INSERT INTO `news_detail`(`content`) VALUES (?)', [test], next); }); }, callback); };
求问是哪里出了问题?我怀疑是all.js中保存正文那里出错了,但不知如何修正。
非常感谢!
我知道了……是在save.js的保存正文中,多加了async.eachSeries(list, function(item, next),导致重复录入,去掉这一条,再把next改为callback就好了