strongloop loopback:如何将远程方法添加到loopback-component-storage容器

问题描述:

我试图将新的REST API方法添加到环回组件存储中,以便从Container下载所有照片。 (见Strongloop loopback-storage-service: how to use StorageService.downloadStream() to download a ZIP of all photos in container?strongloop loopback:如何将远程方法添加到loopback-component-storage容器

下面的代码似乎工作,但我想知道如何加载存储处理程序,handler和文件系统的供应商,factory,在strongloop框架内正确。此外,我不应该复制的数据在datasources.json

有什么建议吗?

// http://localhost/api/containers/container1/downloadContainer/IMG_0799.PNG 

// file: ./server/models/container.js 
loopback_component_storage_path = "../../node_modules/loopback-component-storage/lib/"; 

datasources_json_storage = { 
    "name": "storage", 
    "connector": "loopback-component-storage", 
    "provider": "filesystem", 
    "root": "svc/storage", 
    "_options": { 
    "getFileName": "", 
    "allowedContentTypes": "", 
    "maxFileSize": "", 
    "acl": "" 
    } 
}; 

handler = require(loopback_component_storage_path + './storage-handler'); 

factory = require(loopback_component_storage_path + './factory'); 

module.exports = function(Container) { 
    Container.downloadContainer = function(container, files, res, ctx, cb) { 
    var provider; 
    provider = factory.createClient(datasources_json_storage); 
    return handler.download(provider, null, res, container, files, cb); 
    }; 
    Container.remoteMethod('downloadContainer', { 
    shared: true, 
    accepts: [ 
     {arg: 'container', type: 'string', 'http': {source: 'path'}}, 
     {arg: 'files', type: 'string', 'http': {source: 'path'}}, 
     {arg: 'res', type: 'object', 'http': {source: 'res'}} 
    ], 
    returns: [], 
    http: { 
     verb: 'get', 
     path: '/:container/downloadContainer/:files' 
    } 
    }); 

container.js模型文件中,你可以轻松地访问您在datasources.json定义的StorageService。一旦你有了,你可以拨打它的download()方法。无需在您的代码中实例化(冗余并且每次请求)factoryhandler

service = Container.app.dataSources.{SourceName}.connector 
service.download(container, file, res, cb)