有没有一个nodejs模块或如何使用WebDAV访问GridFS文件的例子?

我有一个现有的node.js应用程序,其中用户有一个用GridFS存储的文件库。 每个用户都有自己的库。 我想使用WebDAV安装该库,以便用户可以从桌面pipe理他们的库。

我已经看到jsDAV用于访问文件系统,但是不清楚如何扩展它以便与虚拟文件系统一起使用。 我发现gitDav,但不清楚如何使用它。

这甚至有可能从头开始?

它看起来像jsDAV是唯一的select。 它是PHP库的一个端口,并不是以像正常的node.js模块那样的方式来设置的。 我发现了一些其他人已经创build的服务器types的例子,用于连接Dropbox和couchdb 。

我现在正在开发一个服务器types,它的工作方式和你所期望的node.js模块更相似。 接下来的一步就是让它和npm一起玩。 你可以在这里看到我的叉子。

我正在寻找使用jsDAV通过WebDAV提供一些资源。 没有find一个工作的例子,我从源头上研究了评论,并自己写了一个。 jsDAV是一个来自PHP库的端口。 佩刀手册是一般的有用指南。 有一件事要记住,因为我们处在一个asynchronous环境中,所以在PHP中返回结果的函数可能需要调用一个callback函数。 当有问题的操作涉及从磁盘读取时,通常会发生这种情况。 callback的第一个参数总是一个错误对象,当一切顺利的时候它应该是空的。

 'use strict'; var crypto = require('crypto'); var jsDAV = require("jsDAV/lib/jsdav"); var jsDAVLocksBackendFS = require("jsDAV/lib/DAV/plugins/locks/fs"); var jsDAVFile = require("jsDAV/lib/DAV/file"); var jsDAVCollection = require("jsDAV/lib/DAV/collection"); var jsExceptions = require("jsDAV/lib/shared/exceptions"); var VirtualFile = jsDAVFile.extend( { initialize: function(name, buffer) { this.name = name; this.buffer = buffer; }, getName: function() { return this.name; }, get: function(callback) { callback(null, this.buffer); }, put: function(data, type, callback) { callback(new jsExceptions.Forbidden("Permission denied to change data")); }, getSize: function(callback) { callback(null, this.buffer.length); }, getETag: function(callback) { var shasum = crypto.createHash('sha1'); shasum.update(this.buffer); var etag = '"' + shasum.digest('hex') + '"'; callback(null, etag); }, getContentType: function(callback) { callback(null, 'text/plain'); } }); var VirtualDirectory = jsDAVCollection.extend( { initialize: function(name, children) { this.name = name; this.children = children; }, getChildren: function(callback) { var list = []; for (var name in this.children) { list.push(this.children[name]); } callback(null, list); }, getChild: function(name, callback) { var child = this.children[name]; if (child) { callback(null, child); } else { callback(new jsExceptions.NotFound("File not found")); } }, childExists: function(name, callback) { var exists = (this.children[name] !== undefined); callback(null, exists); }, getName: function() { return this.name; } }); var children = {}; for (var i = 1; i <= 10; i++) { var name = 'file' + i + '.txt'; var text = 'Hello world, #' + i; children[name] = VirtualFile.new(name, new Buffer(text, 'utf8')); } var grandchildren = {}; for (var i = 66; i <= 99; i++) { var name = 'beer' + i + '.txt'; var text = i + ' bottles of beer'; grandchildren[name] = VirtualFile.new(name, new Buffer(text, 'utf8')); } children['folder'] = VirtualDirectory.new('folder', grandchildren); var root = VirtualDirectory.new(null, children); var options = { node: root, locksBackend: jsDAVLocksBackendFS.new(__dirname + "/data") }; var port = 8000; jsDAV.createServer(options, port);