2012-04-10 2 views
0

Получение слайдов node.js и gridfs непросто. Из всего, что я пробовал, я решил, что это так близко, что я могу получить ограниченное знание, и я понимаю, что текущие поддерживаемые функции позволят.Нет ошибок - по-прежнему нет записи

(ниже в кофе, используйте http://js2coffee.org/, чтобы добраться до JS и наоборот)

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() 

Как ни странно, однако, с помощью APT-получить установку MongoDB-10gen на Ubuntu 11.10, мой файл не сохраняется. И нет сообщений об ошибках, которые помогут мне понять, почему.

Я близок к тому, что все, что я прочитал о gridfs и nodejs, - всего лишь жестокая шутка, и я никогда не увижу эту работу. Пожалуйста помоги.

+0

Если у вас возникла проблема с установкой MongoDB, у меня была такая же проблема, и я задал этот вопрос: http://stackoverflow.com/questions/10046101/installing-and-starting-mongodb-for-php-on- ubuntu-12-04 –

+0

О, нет проблем с установкой ... Я сделал это тысячу раз. Самое забавное с упакованной версией ubuntu, но я обнаружил слишком много противоречивых элементов, я удивляюсь, почему они даже потрудились упаковать его. Я посмотрел ваш пост и тоже прокомментировал :-) –

ответ

2

Я подозреваю, что проблема с асинхронностью. Вы звоните db.close() сразу после звонка в putFile, так что db.close() работает до GridStoreopen обратного вызова, верно? Похоже, это может быть проблемой. Попробуйте переместить db.close() в тот же обратный вызов, что и file.close().

+0

Спасибо, что указали это. Перемещение db.close() в тот же обратный вызов, что и file.close(), имеет смысл. Я думаю, что у меня есть еще одна проблема, потому что я поместил db.close() сразу после файла file.close() в тот же обратный вызов, но я все еще вижу, что он работает без ошибок и не сохраняет. (Выполнение того же с использованием C# из удаленного клиента Windows работает, поэтому это не мой MongoDB, это проблема). Спасибо, в любом случае. –

+0

Мне удалось получить желаемый результат, используя «return file.writeFile (путь, fn)»; в соответствии с примером, который я нашел здесь: github.com/jamescarr/nodejs-mongodb-streaming –

+0

@OnesandZeroes Как вы действительно смогли решить эту проблему? Я боролся с этим почти целый день. Странно то, что в моих журналах мангуста я вижу, как делают мангусты Mongoose: fs.files.find ({filename: '81156f486d17269f524b4b313a808df7.jpg'}) {readPreference: 'primary', w: 'most'} Mongoose: fs.chunks.find ({n: 0, files_id: ObjectId ("54bb815b1b1bdbd2686f20b0")}) {readPreference: 'primary', w: 'most'} вместо вставок, как я ожидал бы, так как я пишу к БД. Как ты думаешь, я скучаю – shanks

Смежные вопросы