2012-11-21 3 views
0

J'ai donc décidé de refaire un blog et j'utilise markdown, j'ai trois fichiers markdown dans un dossier appelé blog et je voulais les lister dans l'ordre par date. Le problème est que je ne suis pas sûr de ce que j'ai fait pour bousiller mon tableau.Liste des fichiers markdown

Heres mon routes.js fichier

exports.list = function(req, res){ 
    var walk = require('walk'), fs = require('fs'), options, walker; 
    var walker = walk.walk('blog'); 
    var fs = new Array(); 
    walker.on("file", function(root,file,next){ 
    var f = root + "/" + file['name'].substring(0, file['name'].lastIndexOf('.')); 
    // push without /blog prefix 
    if (file['name'].substr(-2) == "md") { 
     fs.push(f.substring(f.indexOf('/'))); 
     console.log(fs); 

    } 
    next(); 
    }); 
    walker.on("end", function() { 
     var model = { 
      layout:'home.hbs', 
      title: 'Entries', 
      files: fs 
     }; 
    res.render('home.hbs', model) 
    }); 
}; 

Mais ce que je reviens dans le terminal est la suivante:

[ '/first' ] 
[ '/first', '/second' ] 
[ '/first', '/second', '/third' ] 

Dire que je voulais juste afficher les deux premiers et les ont triés par date dans un fichier démarquage, comme ceci:

Title: Lorem Ipsum dolor sit amet 
Date: January 2d, 2012 

# test message 

Quel est le problème avec mon tableau/reste du Code

Répondre

3

La première chose que j'ai remarqué est la redéclaration de la variable fs. Dans la ligne 2 c'est le module de système de fichiers de Node, à la ligne 4 c'est new Array() (qui devrait être [] si vous me demandez).

Je suis également pas sûr de ce qui est walker module et, puisqu'il est github repo a été enlevé et npm package est pas à jour, je vous recommande d'utiliser l'API filesystem module première à la liste des fichiers, probablement path module pour gérer vos emplacements de fichiers et certains async à colle ensemble:

// `npm install async` first. 
// https://github.com/caolan/async 
var fs = require('fs'); 
var async = require('async'); 

// Lists directory entries in @dir, 
// filters those which names ends with @extension. 
// calls callback with (err, array of strings). 
// 
// FIXME: 
// Mathes directories - solution is fs.stat() 
// (could also sort here by mtime). 
function listFiles(dir, extension, callback) { 
    fs.readdir(dir, function(err, files) { 
    if (err) { 
     console.error('Failed to list files in `%s`: %s', dir, err); 
     return callback(err); 
    } 

    var slicePos = -extension.length; 
    callback(null, files.filter(function(filename) { 
     return (extension == filename.slice(slicePos)) 
    })); 
    }); 
} 

// Sorts markdown based on date entry. 
// Should be based on `mtime`, I think, 
// since reading whole file isn't great idea. 
// (See fs.Stats.) 
// At lease add caching or something, you'll figure :) 
// 
// Also, you better get yourself a nice markdown parser, 
// but for brevity I assume that first 2 lines are: 
// Title: Some Title 
// Date: Valid Javascript Datestring 
function sortMarkdown(pathes, callback) { 
    async.sortBy(pathes, function(fileName, cb) { 
    // Following line is dirty! 
    // You should probably pass absolute pathes here 
    // to avoid errors. Path and Fs modules are your friends. 
    var md = __dirname + '/blogs/' + fileName; 

    fs.readFile(md, 'utf8', function(err, markdown) { 
     if (err) { 
     console.error('Failed to read `%s`: %s', md, err); 
     return cb(err); 
     } 

     // Get second line of md. 
     var date = markdown.split('\n')[1]; 

     // Get datestring with whitespaces removed. 
     date = date.split(':')[1].trim(); 

     // Get timestamp. Change with -ts 
     // to reverse sorting order. 
     var ts = Date.parse(date); 

     // Tell async how to sort; for details, see: 
     // https://github.com/caolan/async#sortBy 
     cb(null, ts); 
    }); 
    }, callback); 
} 

function listSortedMarkdown(dir, callback) { 
    // Async is just great! 
    // https://github.com/caolan/async#waterfall 
    async.waterfall([ 
    async.apply(listFiles, dir, '.md'), 
    sortMarkdown, 
    ], callback); 
} 

listSortedMarkdown(__dirname + '/blogs', function(err, sorted) { 
    return err ? console.error('Error: %s', err) 
      : console.dir(sorted); 
}); 
+0

merci l'homme, ce que je cherchais. – lostAstronaut