首页 > NodeJs中使用async存入数据库的问题

NodeJs中使用async存入数据库的问题

从网站抓取到内容后,存入数据库。一直提示有问题,一开始以为是字段问题,我就写死了存入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就好了

【热门文章】
【热门文章】