2017-07-27 77 views
0

在ostrio中:使用的文件文檔findOne函數,這在我的情況下不方便,我需要find()參數以通過用戶ID過濾等等。 我用普通的流星從官方教程陣營的做法如下:顯示存儲在ostrio中的圖像:文件

renderImages(){ 
    return this.props.images.map((image) => (
     <Pic src={image.link()} /> 
    )); 
} 

render() { 
... 
    return (
     <form> 
      <FormGroup controlId="formControlsFile"> 
       <Media> 
        {this.renderImages()} 
       </Media> 
... 
      </FormGroup> 
     </form>); 
    } 
} 

export default createContainer(props => { 
    Meteor.subscribe("files.images.all"); 
    return { 
     images: Images.find({name: "1.jpeg"}).fetch(), 
    } 
}, App); 

這裏是收集:

import { Meteor } from 'meteor/meteor'; 
import { FilesCollection } from 'meteor/ostrio:files'; 

const Images = new FilesCollection({ 
    collectionName: 'Images', 
    allowClientCode: false, // Disallow remove files from Client 
    onBeforeUpload(file) { 
... 
}); 

if (Meteor.isServer) { 
    Meteor.publish('files.images.all', function() { 
     return Images.find().fetch(); 
    }); 
} 

export default Images; 

和PIC元素:

import React from 'react'; 
import {createContainer} from 'meteor/react-meteor-data' 

class Pic extends React.Component { 
    render() { 
     return (
      <img width={64} height={64} src={this.props.src} alt="Image"/> 
     ); 
    } 
} 

export default createContainer(props => { 
    console.log("Image src: " + props.src); 
    return { 
     src: (props.src ? props.src : "no-image-64x64.jpg"), 
    } 
}, Pic); 

此代碼將導致以下異常:

I20170727-13:46:02.470(3)? Exception from sub files.images.all id uXo24fBLqH8rsMiDy Error: Publish function returned an array of non-Cursors 
I20170727-13:46:02.472(3)?  at [object Object]._.extend._publishHandlerResult (packages/ddp-server/livedata_server.js:1098:20) 
I20170727-13:46:02.472(3)?  at [object Object]._.extend._runHandler (packages/ddp-server/livedata_server.js:1060:10) 
I20170727-13:46:02.473(3)?  at [object Object]._.extend._startSubscription (packages/ddp-server/livedata_server.js:859:9) 
I20170727-13:46:02.473(3)?  at [object Object]._.extend.protocol_handlers.sub (packages/ddp-server/livedata_server.js:625:12) 
I20170727-13:46:02.474(3)?  at packages/ddp-server/livedata_server.js:559:43 

回答

0

這裏有兩個因素,重要的是兩個訣竅:

1.返回一個指針,而不是數組

你發佈函數需要返回一個指針,目前它返回一個數組(通過調用提取),這是沒有光標。

您不需要在發佈中獲取,但在客戶端。該出版物僅僅是有一個給定的過濾器同步的客戶端收集與服務器收集/變換/排序等

2.你需要從Mongo.Collection獲取數據,而不是FilesCollection

FilesCollection本身不是集合​​,而是使用Mongo.Collection。如果你想從收集使用數據,需要引用的集合,像這樣:Images.collection.find

例子返回遊標:

Meteor.publish('files.images.all', function() { 

    // find data and return cursor if 
    // data exists 
    const data = Images.collection.find(); 
    if (data && data.count() >0) 
     return data; 

    this.ready(); // set ready if no data exists 
}); 

這同樣適用於你的客戶:

export default createContainer(props => { 
    Meteor.subscribe("files.images.all"); 
    return { 
     images: Images.collection.find({name: "1.jpeg"}).fetch(), 
    } 
}, App); 

還有更多對ostrio:files documentation

+0

完全相同的異常讀取(( – Dmitry

+0

哦,是的,我忘了提及,你需要從集合中獲取數據,而不是FilesCollection實例,我會更新我的答案 – Jankapunkt

+0

部分作品:顯示「無圖像」。如何獲取存儲圖像本身並將其傳遞給的src? – Dmitry

相關問題