Selle tulemusena enam andmeid kliendi poolt Mongodb baasi lisada ei lubata:
insert failed: Access denied
Lahenduseks on kasutada Meteori meetodit Meteor.methods() , mida saab välja kutsuda kliendi poolt kuid mis jooksevad serveris.
Lisan meetodid faili /imports/api/Items.jskuigi see võib olla ka nt failis collections.js vms. Lisan sinna kirjete lisamise osa mis tuleb võtta App.js-st.
App.js-s asendan kirjete lisamise osa meetodi väljakutsumisega:
Meteor.call('insertNewItem',asiYks,asiKaks);
Et kontrollida argumentide väärtusi on üks variant kasutada andmebaasi skeemi, teine variant Meteori pakki check. Kasutan viimast:
meteor add check
ja lisan enne sisestavate andmete lisamist kontrolli:
check(asiYks,String);check(asiKaks,String);
st need peavad olema stringid, muul juhul saadakse konsoolile veateade. Et kontrollida ka kliendipoolt st frontendi tuleb meetodi väljakutsumisel App.js-s lisada nn callback funktsioon:
Praegusel juhul tühjendatakse vormi väljad vaid juhul kui andmed pole vigased,
Analoogiliselt tuleb meetodi abil uuendada hääletuste arvu. Selleks võtan Item.js-st funktsiooni voteOne() sisu ja kasutan seda Items.js-s Meteori meetodite osas, luues uue funktsiooni voteOnItem():
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 osareturn ( // 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(() =>{return { items:Items.find({}).fetch() }},App);