让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()
奇怪的是,在Ubuntu 11.10上使用apt-get install mongodb-10gen,我的文件没有保存。并且没有错误消息可以帮助我理解原因。
我几乎相信我读到的关于gridfs和nodejs的所有内容都只是一个残酷的笑话,我永远不会看到这个工作。请帮忙。
答案 0 :(得分:2)
我怀疑是一个异步问题。您在致电db.close()
后立即致电putFile
,因此db.close()
在GridStore
的{{1}}回拨开始之前正在运行,对?好像这可能是一个问题。尝试将open
移动到与db.close()
相同的回调中。