sudo apt-get install curl curl https://install.meteor.com | /bin/sh meteor create starpublisher cd starpublisher meteor console.log('Both contexts'); if (Meteor.isServer) console.log ('Web server context'); else if (Meteor.isClient) console.log ('Browser context'); var Articles = new Meteor.Collection("articles"); Articles.insert({}); sudo apt-get install git PATH=$PATH:~/.meteor/tools/0b2f28e18b/bin npm install -g meteorite mrt add moment Articles = new Meteor.Collection("articles"); {{> articles}} {{> editor}} Template.articles.articles = function() { return Articles.find({}, {sort: {date: -1}}); } Template.articles.helpers({ formatDate: function(date) { return moment(date).format("lll"); } }); Template.articles.events({ 'click': function() { var doc = Articles.findOne({_id: this._id}); load(doc._id, doc.title, doc.text); } }); Template.editor.events({ 'click #save': function() { var now = new Date(); Articles.upsert(val('id'), { title:val('title'), text:val('text'), date:now}); load(); }, 'click #remove': function() { Articles.remove(val('id')); load(); } }); meteor remove insecure meteor remove autopublish meteor add accounts-password meteor add accounts-ui Meteor.publish("articles", function() { return Articles.find(); }); Articles.allow({ remove: function(userId, doc) { return doc.owner === userId; } }); Meteor.methods({ upsert: function(id, title, text) { if (!this.userId) throw new Meteor.Error(403, 'Please log in first'); var now = new Date(); var email = Meteor.user().emails[0].address var doc = {owner: this.userId, title: title, text: text, date: now, email: email}; if (id) { if (Articles.update({_id: id, owner: this.userId}, {$set: doc}) < 1) throw new Meteor.Error(404, 'Access not Allowed'); } else { Articles.insert(doc); } } }); Template.editor.events({ 'click #save': function() { error(); Meteor.call('upsert', val('id'), val('title'), val('text'), function(e) { error(e.message); nav(); }); nav(1); }, 'click #remove': function() { Articles.remove(val('id')); nav(1); } });