mongoose在获取路线中删除并创build

我有一个与mongoose小问题,我正在做的是从在线rss提要,parsing它,并将其传递给一个数组,我喂养mongoose模型,所有这一切发生在获取路线,我想要的要完成的是首先从mongoose模型中删除所有的数据,然后用新的数据填充它,但是它总是一起删除数据,因为parsing器迭代几次,或者它不删除任何东西,数据只是不断增加的模型。

这是我的代码

'use strict'; const Promise = require('bluebird'); const request = require('request'); const FeedParser = require('feedparser'); const express = require('express'); const router = express.Router(); const xray = require('x-ray')(); var Post = require('../models/post'); var dataArray = []; router.get('/', function (req, res) { const fetch = (url) => { return new Promise((resolve, reject) => { if (!url) { return reject(new Error(`Bad URL (url: ${url}`)); } const feedparser = new FeedParser(); const items = []; feedparser.on('error', (e) => { return reject(e); }).on('readable', () => { // This is where the action is! var item; console.time('loading') while (item = feedparser.read()) { items.push(item); } }).on('end', () => { resolve({ meta: feedparser.meta, records: items }); }); request({ method: 'GET', url: url }, (e, res, body) => { if (e) { return reject(e); } else if (res.statusCode != 200) { return reject(new Error(`Bad status code (status: ${res.statusCode}, url: ${url})`)); } feedparser.end(body); feedparser.on('end', function () { console.log('Done'); }); }); }); }; Promise.map([ 'url', 'url', 'url', 'url'], (url) => fetch(url), { concurrency: 4 }) // note that concurrency limit .then((feeds) => { feeds.forEach(feed => { feed.records.forEach(record => { dataArray.push(record); }); }); }).catch(function (error) { console.log(error); }); Post.remove({}, function (err) { if (err) { console.log(err); } else { console.log('collection removed'); } }); dataArray.forEach(post => { Post.create({ title: post.title, content: post.description, created: post.date, image: post['rss:image']['#'], link: post.link }, function (err, newPost) { console.log(newPost.title); }); }); Post.find({}, function (err, posts) { if (err) { console.log(err); } else { res.render('index/home', { posts: posts }); } }); }); module.exports = router; 

这一切都不会同步运行。 你可以做这样的事情:

 'use strict'; const Promise = require('bluebird'); const request = require('request'); const FeedParser = require('feedparser'); const express = require('express'); const router = express.Router(); const xray = require('x-ray')(); var Post = require('../models/post'); var dataArray = []; const fetch; router.get('/', function (req, res) { Post.remove({}, function (err) { if (err) { console.log(err); } else { console.log('collection removed. Starting to fetch Posts from Service'); fetch = (url) => { return new Promise((resolve, reject) => { if (!url) { return reject(new Error(`Bad URL (url: ${url}`)); } const feedparser = new FeedParser(); const items = []; feedparser.on('error', (e) => { return reject(e); }).on('readable', () => { // This is where the action is! var item; console.time('loading') while (item = feedparser.read()) { items.push(item); } }).on('end', () => { resolve({ meta: feedparser.meta, records: items }); }); request({ method: 'GET', url: url }, (e, res, body) => { if (e) { return reject(e); } else if (res.statusCode != 200) { return reject(new Error(`Bad status code (status: ${res.statusCode}, url: ${url})`)); } feedparser.end(body); feedparser.on('end', function () { console.log('Done'); }); }); }); }; } }); Promise.map([ 'url', 'url', 'url', 'url'], (url) => fetch(url), { concurrency: 4 }) // note that concurrency limit .then((feeds) => { feeds.forEach(feed => { dataArray = dataArray.concat(feed.records); /*feed.records.forEach(record => { dataArray.push(record); });*/ }); console.log('inserting posts in the collection'); dataArray.forEach(post => { Post.create({ title: post.title, content: post.description, created: post.date, image: post['rss:image']['#'], link: post.link }, function (err, newPost) { console.log(newPost.title); }); }); console.log("Fetching posts from the collection"); Post.find({}, function (err, posts) { if (err) { console.log(err); } else { res.render('index/home', { posts: posts }); } }); }).catch(function (error) { console.log(error); }); }); module.exports = router; 

我没有testing过这个。 请在你的最后testing一下。 让我知道是否有错误或什么。