Javascript 如何在node js中使用增量数据执行文件写入?
我有一个80个项目的列表,每页有10个项目。现在我的想法是将所有数据写入文件,这样前10个将在一个文件中,然后下10个在另一个文件中,依此类推,我的80个博客每页有10个,共有8个页面。问题是,我只得到一个文件,10个博客。其他人呢找到错误。谢谢。为此我写了如下脚本 我发现循环没有增加Javascript 如何在node js中使用增量数据执行文件写入?,javascript,node.js,mongoose,mean-stack,fs,Javascript,Node.js,Mongoose,Mean Stack,Fs,我有一个80个项目的列表,每页有10个项目。现在我的想法是将所有数据写入文件,这样前10个将在一个文件中,然后下10个在另一个文件中,依此类推,我的80个博客每页有10个,共有8个页面。问题是,我只得到一个文件,10个博客。其他人呢找到错误。谢谢。为此我写了如下脚本 我发现循环没有增加 exports.getBlogsTest = function(req, res) { helper.logs('getBlogs', 'blog'); var pages = ['undefin
exports.getBlogsTest = function(req, res) {
helper.logs('getBlogs', 'blog');
var pages = ['undefined', '2', '3', '4', '5', '6', '7', '8'],
pageNum = '';
pages.forEach(function(i, v) {
try {
var currentPage = Number(i);
var itemsPerPage = 10;
var startItem = (currentPage - 1) * itemsPerPage;
async.waterfall([
function(done) {
try {
if (currentPage === 1) {
blogs.count().exec(function(err, count) {
if (err) {
helper.logs('getBlogs', 'blog', err, 'console');
throw err;
} else {
done(err, count);
}
});
} else {
done('', 'page');
}
} catch (e) {
helper.logs('getBlogs', 'blog', e.message);
}
},
function(count, done) {
try {
if (count) {
if (count && count !== 'page') {
res.setHeader('totalItems', count);
}
blogs.find().sort({ date: -1 }).select('-text').skip(startItem).limit(itemsPerPage).exec(function(err, data) {
if (err) {
helper.logs('getBlogs', 'blog', err, 'console');
throw err;
}
if (data && data.length > 0) {
res.send(data);
console.log('reached@@@@@@@@@@@@@@@@@@@')
if (i === 'undefined') {
pageNum = '';
} else {
pageNum = i;
}
var fileName = 'public/amp/test2/amp-blog-list' + pageNum + '.html';
var modData = data;
fs.writeFile(fileName, modData, function(err) {
if (err) {
return console.log(err);
}
console.log("The file was saved!");
});
} else {
res.send([]);
}
});
} else {
res.send([]);
}
} catch (e) {
helper.logs('getBlogs', 'blog', e.message);
}
}
],
function(err) {
helper.logs('getBlogs', 'blog', err, 'console');
throw err;
});
} catch (e) {
helper.logs('getBlogs', 'blog', e.message);
}
})
};
为什么要使用这么多的
try catch
?
虽然它在许多情况下可能很有用,但您应该避免在不必要时使用它
您遇到问题的几点:
var currentPage=编号(i)代码> 当i为“未定义”时,currentPage==NaN
- 与
var startItem=(当前页-1)*itemsPerPage相同代码> 当currentPage为“NaN”时,起始值TM==NaN
exports.getBlogsTest = function(req, res) {
helper.logs('getBlogs', 'blog');
var itemsPerPage = 10;
for (var i = 1; i < 11; i++) { // pages 1-10
(function(currentPage){ // currentPage = i
var startItem = (currentPage - 1) * itemsPerPage;
async.waterfall([
function(done) {
if (currentPage === 1) {
blogs.count().exec(function(err, count) {
if (err) {
helper.logs('getBlogs', 'blog', err, 'console');
//throw err;
done(err); // the done callback will be called with the error
} else {
done(null, count); // no error so send null
}
});
} else {
done(null, 'page'); // no error so send null
}
},
function(count, done) {
if (count) {
if (count !== 'page') {
res.setHeader('totalItems', count);
}
blogs.find().sort({ date: -1 }).select('-text').skip(startItem).limit(itemsPerPage).exec(function(err, data) {
if (err) {
helper.logs('getBlogs', 'blog', err, 'console');
done(err); // you never called done
//throw err;
}
if (data && data.length > 0) {
res.send(data);
var fileName = 'public/amp/test2/amp-blog-list' + (currentPage === 1 ? '' : currentPage) + '.html';
var modData = data;
fs.writeFile(fileName, modData, function(err) {
if (err) {
done(err);
return console.log(err);
}
console.log("The file was saved!");
done(); // you never called done
});
} else {
res.send([]);
done(); // you never called done
}
});
} else {
res.send([]);
done(); // you never called done
}
}
], function done(err) {
// this is called when waterfall is done or in case of error
// it would always throw if you didn't check for error
// also is it necessary to throw?
// if (err) throw err;
helper.logs('getBlogs', 'blog', err, 'console');
});
})(i);
}
};
exports.getBlogsTest=函数(req,res){
logs('getBlogs','blog');
var itemsPerPage=10;
对于(变量i=1;i<11;i++){//第1-10页
(函数(currentPage){//currentPage=i
var startItem=(当前页-1)*itemsPerPage;
异步瀑布([
功能(完成){
如果(当前页面===1){
blogs.count().exec(函数(err,count){
如果(错误){
logs('getBlogs','blog',err',console');
//犯错误;
done(err);//将使用错误调用done回调
}否则{
完成(null,count);//没有错误,因此发送null
}
});
}否则{
完成(null,'page');//没有错误,因此发送null
}
},
功能(计数,完成){
如果(计数){
如果(计数!=“第页”){
res.setHeader('totalItems',计数);
}
blogs.find().sort({date:-1})。select('-text')。skip(startItem)。limit(itemsPerPage)。exec(函数(err,data){
如果(错误){
logs('getBlogs','blog',err',console');
完成(错误);//你从来没有叫过完成
//犯错误;
}
如果(数据和数据长度>0){
res.send(数据);
var fileName='public/amp/test2/amp blog list'+(currentPage==1?'':currentPage)+'.html';
var modData=数据;
writeFile(文件名、modData、函数(err){
如果(错误){
完成(错误);
返回console.log(err);
}
log(“文件已保存!”);
done();//您从未调用过done
});
}否则{
res.send([]);
done();//您从未调用过done
}
});
}否则{
res.send([]);
done();//您从未调用过done
}
}
],功能完成(错误){
//当瀑布完成或出现错误时调用此函数
//如果不检查错误,它将始终抛出
//还有必要扔吗?
//如果(错误)抛出错误;
logs('getBlogs','blog',err',console');
});
})(i) );
}
};