2012-04-10 4 views
0

Obtenir node.js et gridfs pour jouer sympa n'est pas facile. De toutes les choses que j'ai essayées, je me suis contenté d'être aussi proche que possible avec une connaissance limitée et ce que je comprends des fonctions actuelles supportées.Pas d'erreur - toujours pas d'écriture

(ci-dessous dans le café, utilisez http://js2coffee.org/ pour accéder aux js et vice-versa)

util = require("util") 
mongodb = require("mongodb") 
GridStore = mongodb.GridStore 
parse = (options) -> 
    opts = {} 
    opts = options[0] if options.length > 0 
    opts.metadata = {} unless opts.metadata 
    opts 

db = new Db("local", new Server("127.0.0.1", 27017, 
    auto_reconnect: false 
    poolSize: 1 
), 
    native_parser: false 
) 
db.open() 
putFile = (path, name, options, fn) -> 
    options = parse(options) 
    options.metadata.filename = name 
    new GridStore(db, name, "w", options).open (err, file) -> 
    return fn(err) if err 
    file.writeFile path, (err, fn) -> 
     file.close() 

opts = content_type: "plain/text" 
myfileupload = putFile("myfile.txt", "known_hosts", opts) 
db.close() 

Étrangement cependant, en utilisant apt-get install mongodb-10gen sur Ubuntu 11.10, mon dossier est pas enregistré. Et il n'y a pas de messages d'erreur pour m'aider à comprendre pourquoi. Je suis sur le point de croire que tout ce que j'ai lu sur gridfs et nodejs n'est qu'une blague cruelle, et je ne verrai jamais ce travail. S'il vous plaît aider.

+0

si vous avez le problème de l'installation de MongoDB, j'ai eu le même problème et voir cette question j'ai demandé: http://stackoverflow.com/questions/10046101/installing-and-starting-mongodb-for-php-on- ubuntu-12-04 –

+0

oh, pas de problème avec l'installation ... je l'ai fait un millier de fois. J'ai eu beaucoup de plaisir avec la version packagée d'ubuntu, mais j'ai trouvé trop d'éléments contradictoires apparaissant, je me demande pourquoi ils ont même pris la peine de l'emballer. J'ai jeté un coup d'oeil à votre message - et j'ai aussi commenté ;-) –

Répondre

2

Je suspecte un problème asynchrone. Vous appelez db.close() immédiatement après l'appel au putFile, alors db.close() est en cours d'exécution avant les feux de rappel open, n'est-ce pas? On dirait que ça pourrait être un problème. Essayez de déplacer db.close() dans le même rappel que file.close().

+0

Merci de l'avoir signalé. Déplacer db.close() dans le même rappel que file.close() a du sens. Je pense que j'ai un autre problème cependant, parce que je mets le db.close() immédiatement après le fichier. Close() dans le même rappel, mais je le vois toujours courir sans erreurs et sans sauvegarder. (Faire la même chose en utilisant C# à partir d'un client Windows distant fonctionne, donc ce n'est pas mon MongoDB qui est le problème). Merci quand même. –

+0

J'ai été en mesure d'obtenir le résultat souhaité en utilisant un "return file.writeFile (chemin, fn);" selon un exemple, j'ai trouvé ici: github.com/jamescarr/nodejs-mongodb-streaming –

+0

@OnesandZeroes Comment avez-vous réellement réussi à résoudre ce problème? Je me bats depuis presque une journée. Chose étrange est que dans mes journaux de mangouste, je vois mongoose faisant trouve Mongoose: fs.files.find ({nom de fichier: '81156f486d17269f524b4b313a808df7.jpg'}) {readPreference: 'primaire', w: 'majorité'} Mongoose: fs.chunks.find ({n: 0, files_id: ObjectId ("54bb815b1b1bdbd2686f20b0")}) {readPreference: 'primaire', w: 'majoritaire'} au lieu des insertions car je m'attendrais à ce que j'arrive depuis que j'écris à la DB. Que pensez-vous que je manque – shanks