Eemaldan paki autopublish. Selle paki mõte on arendamise ajal lihtsustada admebaasi andmete vaatamist kliendi poolt. Lõppversioonis on see turvaprobleem ja tuleb eemaldada ning muuta Meteoris juurdepääsu andmete kasutamisele.
Andmete kättesaamiseks tuleb nüüd serveri poolelt vajalikud andmed avaldada (publish) ja kliendi poolelt tellida (subscribe) need andmed
Tõstan import/api/Items.js failis kõik meetodid serverikontrolli tingimusse.
mis kasutab tellimuse muutujat itemsSub ja meetodit ready(), mis on tõene kui andmed on saadaval. App.js-s lisan veel tingimuse: render() funktsiooni olemasoleva tagastamise (return) ette
import React, {Component} from'react';import { createContainer} from'meteor/react-meteor-data';import Item from'./Item';import Items from'../api/Items';classAppextendsComponent {addItems(event) {event.preventDefault(); //takistab lehe uuestilaadimist//Mongosse andmete lisamine//salvestan vormi väärtused muutujatesseconstasiYks=this.refs.asiYks.value.trim();constasiKaks=this.refs.asiKaks.value.trim();//lisatakse vaid siis kui vormi välja pole tühjadif(asiYks!=''&& asiKaks!=''){//kutsub välja serverimeetodi ja kui andmed on korrektsed eale lisamist tühjendame vormi väljadMeteor.call('insertNewItem',asiYks,asiKaks,(err,res) =>{if(!err) {this.refs.asiYks.value ='';this.refs.asiKaks.value=''; } }); } }render () { //alati peab olema komponendi osaif(!this.props.ready) {return ( <div>laen..</div> ) }return ( // render funktsioon peab midagi tagastana, see on JSX<div> <header> <h1>Hääletusäpp</h1> </header> <main> <formclassName='new-items'onSubmit={this.addItems.bind(this)}> <inputtype='text'ref='asiYks'/> <inputtype='text'ref='asiKaks'/> <buttontype='submit'>Lisa</button> </form> {this.props.items.map((item)=>{return <Itemitem={item} key= {item._id} /> })} </main></div> ); }}//Wrapper andmete lisamiseks klassile AppexportdefaultcreateContainer(() =>{let itemsSub =Meteor.subscribe('allItems');return { ready:itemsSub.ready(), items:Items.find().fetch() }},App);