Meteor - คู่มือฉบับย่อ

ตามเอกสารอย่างเป็นทางการของ Meteor -

Meteor เป็นแพลตฟอร์ม JavaScript แบบฟูลสแต็กสำหรับพัฒนาเว็บและแอปพลิเคชันบนมือถือที่ทันสมัย Meteor ประกอบด้วยชุดเทคโนโลยีหลักสำหรับการสร้างแอปพลิเคชันรีแอคทีฟไคลเอนต์ที่เชื่อมต่อเครื่องมือสร้างและชุดแพ็กเกจที่คัดสรรจาก Node.js และชุมชน JavaScript ทั่วไป

คุณสมบัติ

  • Web and Mobile - Meteor นำเสนอแพลตฟอร์มสำหรับพัฒนาแอพ Web, Android และ IOS

  • Universal Apps - รหัสเดียวกันสำหรับเว็บเบราว์เซอร์และโทรศัพท์มือถือ

  • Packages - แพ็คเกจจำนวนมากที่ติดตั้งและใช้งานง่าย

  • Meteor Galaxy - บริการคลาวด์สำหรับการใช้งานแอพ Meteor

ข้อดี

  • นักพัฒนาต้องใช้ JavaScript สำหรับการพัฒนาเซิร์ฟเวอร์และฝั่งไคลเอ็นต์เท่านั้น
  • การเข้ารหัสนั้นง่ายมากและเป็นมิตรกับผู้เริ่มต้น
  • แอพ Meteor เป็นแบบเรียลไทม์โดยค่าเริ่มต้น
  • แพ็คเกจทางการและชุมชนช่วยประหยัดเวลาได้มาก

ข้อ จำกัด

  • Meteor ไม่เหมาะสำหรับการใช้งานขนาดใหญ่และซับซ้อน

  • มีเวทมนตร์มากมายเกิดขึ้นเมื่อทำงานกับ Meteor ดังนั้นนักพัฒนาอาจพบว่าตัวเองมีข้อ จำกัด ในทางใดทางหนึ่ง

ในบทนี้เราจะเรียนรู้วิธีการติดตั้ง Meteor บนระบบปฏิบัติการ Windows ก่อนที่เราจะเริ่มทำงานกับ Meteor เราจำเป็นต้องมีNodeJS. หากคุณยังไม่ได้ติดตั้งคุณสามารถตรวจสอบลิงก์ที่ให้ไว้ด้านล่าง

ข้อกำหนดเบื้องต้น

NodeJS เป็นแพลตฟอร์มที่จำเป็นสำหรับการพัฒนา Meteor หากคุณไม่มีการตั้งค่าสภาพแวดล้อม NodeJS ให้พร้อมคุณสามารถตรวจสอบไฟล์NodeJS Environment Setup.

ติดตั้ง Meteor

ดาวน์โหลดตัวติดตั้งดาวตกอย่างเป็นทางการจากหน้านี้

หากเกิดข้อผิดพลาดระหว่างการติดตั้งให้ลองเรียกใช้โปรแกรมติดตั้งในฐานะผู้ดูแลระบบ เมื่อการติดตั้งเสร็จสมบูรณ์คุณจะถูกขอให้สร้างบัญชี Meteor

เมื่อคุณเสร็จสิ้นการติดตั้งโปรแกรมติดตั้ง Meteor คุณสามารถทดสอบว่าทุกอย่างติดตั้งถูกต้องหรือไม่โดยเรียกใช้รหัสต่อไปนี้ในหน้าต่างพรอมต์คำสั่ง

C:\Users\username>meteor

ต่อไปนี้จะเป็นผลลัพธ์ -

ในบทนี้เราจะเรียนรู้วิธีสร้างแอปพลิเคชั่น Meteor ตัวแรกของคุณ

ขั้นตอนที่ 1 - สร้างแอป

ในการสร้างแอพเราจะเรียกใช้ไฟล์ meteor createคำสั่งจากหน้าต่างพรอมต์คำสั่ง ชื่อแอพจะเป็นmeteorApp.

C:\Users\username\Desktop\Meteor>meteor create meteorApp

ขั้นตอนที่ 2 - เรียกใช้แอพ

เราสามารถเรียกใช้แอพได้โดยพิมพ์ meteor คำสั่ง

C:\Users\username\Desktop\meteorApp>meteor

คำสั่งนี้จะเริ่มกระบวนการต่างๆซึ่งสามารถเห็นได้ในภาพต่อไปนี้

ขั้นตอนที่ 3 - ตรวจสอบผลลัพธ์

ตอนนี้เราสามารถเปิดไฟล์ http://localhost:3000/ ที่อยู่เพื่อดูว่าแอพ Meteor ตัวแรกของเรามีหน้าตาเป็นอย่างไร

เทมเพลต Meteor ใช้แท็กระดับบนสุดสามแท็ก สองตัวแรกคือhead และ body. แท็กเหล่านี้ทำหน้าที่เหมือนกับใน HTML ทั่วไป แท็กที่สามคือtemplate. นี่คือสถานที่ที่เราเชื่อมต่อ HTML กับ JavaScript

เทมเพลตอย่างง่าย

ตัวอย่างต่อไปนี้แสดงวิธีการทำงาน เรากำลังสร้างเทมเพลตด้วยname = "myParagraph"แอตทริบิวต์ ของเราtemplate สร้างแท็กใต้ bodyอย่างไรก็ตามเราจำเป็นต้องรวมไว้ก่อนที่จะแสดงผลบนหน้าจอ เราสามารถทำได้โดยใช้{{> myParagraph}}ไวยากรณ์ ในเทมเพลตของเราเรากำลังใช้เครื่องหมายปีกกาสองชั้น({{text}}). นี่คือภาษาแม่แบบดาวตกที่เรียกว่าSpacebars.

ในไฟล์ JavaScript ของเราเรากำลังตั้งค่า Template.myParagraph.helpers({})วิธีการที่จะเชื่อมต่อกับแม่แบบของเรา เรากำลังใช้text ผู้ช่วยในตัวอย่างนี้

eorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   <h1>Header</h1>
   {{> myParagraph}}
</body>
 
<template name = "myParagraph">
   <p>{{text}}</p>
</template>

eorApp.js

if (Meteor.isClient) {
   
   // This code only runs on the client
   Template.myParagraph.helpers({
      text: 'This is paragraph...'
   });
}

หลังจากบันทึกการเปลี่ยนแปลงแล้วผลลัพธ์ต่อไปนี้จะเป็น -

เทมเพลตบล็อก

ในตัวอย่างต่อไปนี้เรากำลังใช้ {{#each paragraphs}} เพื่อทำซ้ำในไฟล์ paragraphs อาร์เรย์และเทมเพลตการส่งคืน name = "paragraph" สำหรับแต่ละค่า

eorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   <div>
      {{#each paragraphs}}
         {{> paragraph}}
      {{/each}}
   </div>
</body>
 
<template name = "paragraph">
   <p>{{text}}</p>
</template>

เราจำเป็นต้องสร้าง paragraphsผู้ช่วย. นี่จะเป็นอาร์เรย์ที่มีค่าข้อความห้าค่า

eorApp.js

if (Meteor.isClient) {
   
   // This code only runs on the client
   Template.body.helpers({
      paragraphs: [
         { text: "This is paragraph 1..." },
         { text: "This is paragraph 2..." },
         { text: "This is paragraph 3..." },
         { text: "This is paragraph 4..." },
         { text: "This is paragraph 5..." }
      ]
   });
}

ตอนนี้เราสามารถเห็นห้าย่อหน้าบนหน้าจอ

ในบทนี้เราจะเรียนรู้วิธีการใช้งาน MongoDB คอลเลกชัน

สร้างคอลเล็กชัน

เราสามารถสร้างคอลเลกชันใหม่โดยใช้รหัสต่อไปนี้ -

eorApp.js

MyCollection = new Mongo.Collection('myCollection');

เพิ่มข้อมูล

เมื่อสร้างคอลเล็กชันแล้วเราสามารถเพิ่มข้อมูลได้โดยใช้ไฟล์ insert วิธี.

eorApp.js

MyCollection = new Mongo.Collection('myCollection');

var myData = {
   key1: "value 1...",
   key2: "value 2...",
   key3: "value 3...",
   key4: "value 4...",
   key5: "value 5..."
}

MyCollection.insert(myData);

ค้นหาข้อมูล

เราสามารถใช้ไฟล์ find วิธีค้นหาข้อมูลในคอลเลกชัน

eorApp.js

MyCollection = new Mongo.Collection('myCollection');

var myData = {
   key1: "value 1...",
   key2: "value 2...",
   key3: "value 3...",
   key4: "value 4...",
   key5: "value 5..."
}

MyCollection.insert(myData);

var findCollection = MyCollection.find().fetch();
console.log(findCollection);

คอนโซลจะแสดงข้อมูลที่เราแทรกไว้ก่อนหน้านี้

เราจะได้ผลลัพธ์เดียวกันโดยการเพิ่มพารามิเตอร์การค้นหา

eorApp.js

MyCollection = new Mongo.Collection('myCollection');

var myData = {
   key1: "value 1...",
   key2: "value 2...",
   key3: "value 3...",
   key4: "value 4...",
   key5: "value 5..."
}

MyCollection.insert(myData);

var findCollection = MyCollection.find({key1: "value 1..."}).fetch();
console.log(findCollection);

อัปเดตข้อมูล

ขั้นตอนต่อไปคือการอัปเดตข้อมูลของเรา หลังจากที่เราสร้างคอลเล็กชันและแทรกข้อมูลใหม่แล้วเราสามารถใช้ไฟล์update วิธี.

eorApp.js

MyCollection = new Mongo.Collection('myCollection');

var myData = {
   key1: "value 1...",
   key2: "value 2...",
   key3: "value 3...",
   key4: "value 4...",
   key5: "value 5..."
}

MyCollection.insert(myData);

var findCollection = MyCollection.find().fetch();
var myId = findCollection[0]._id;

var updatedData = {
   key1: "updated value 1...",
   key2: "updated value 2...",
   key3: "updated value 3...",
   key4: "updated value 4...",
   key5: "updated value 5..."
}

MyCollection.update(myId, updatedData);

var findUpdatedCollection = MyCollection.find().fetch();
console.log(findUpdatedCollection);

คอนโซลจะแสดงว่าคอลเล็กชันของเรามีการอัปเดต

ลบข้อมูล

ข้อมูลสามารถลบออกจากคอลเลกชันโดยใช้ไฟล์ removeวิธี. เรากำลังตั้งค่าid ในตัวอย่างนี้เป็นพารามิเตอร์เพื่อลบข้อมูลเฉพาะ

eorApp.js

MyCollection = new Mongo.Collection('myCollection');

var myData = {
   key1: "value 1...",
   key2: "value 2...",
   key3: "value 3...",
   key4: "value 4...",
   key5: "value 5..."
}

MyCollection.insert(myData);

var findCollection = MyCollection.find().fetch();
var myId = findCollection[0]._id;

MyCollection.remove(myId);

var findDeletedCollection = MyCollection.find().fetch();
console.log(findDeletedCollection);

คอนโซลจะแสดงอาร์เรย์ว่าง

หากเราต้องการลบทุกอย่างออกจากคอลเลกชันเราสามารถใช้วิธีการเดียวกันนี้แทนได้ id เราจะใช้วัตถุว่างเปล่า {}. เราจำเป็นต้องดำเนินการนี้บนเซิร์ฟเวอร์ด้วยเหตุผลด้านความปลอดภัย

eorApp.js

if (Meteor.isServer) {

   MyCollection = new Mongo.Collection('myCollection');

   var myData = {
      key1: "value 1...",
      key2: "value 2...",
      key3: "value 3...",
      key4: "value 4...",
      key5: "value 5..."
   }

   MyCollection.insert(myData);
   MyCollection.remove({});
	
   var findDeletedCollection = MyCollection.find().fetch();
   console.log(findDeletedCollection);
}

เรายังสามารถลบข้อมูลโดยใช้พารามิเตอร์อื่น ๆ ดังตัวอย่างก่อนหน้านี้ Meteor จะบังคับให้เราทำสิ่งนี้จากเซิร์ฟเวอร์

eorApp.js

if (Meteor.isServer) {

   MyCollection = new Mongo.Collection('myCollection');

   var myData = {
      key1: "value 1...",
      key2: "value 2...",
      key3: "value 3...",
      key4: "value 4...",
      key5: "value 5..."
   }

   MyCollection.insert(myData);
   MyCollection.remove({key1: "value 1..."});
	
   var findDeletedCollection = MyCollection.find().fetch();
   console.log(findDeletedCollection);
}

จะเห็นได้ว่าข้อมูลถูกลบออกจากหน้าต่างคำสั่ง

ในบทนี้เราจะเรียนรู้วิธีการทำงานกับแบบฟอร์ม Meteor

การป้อนข้อความ

ขั้นแรกเราจะสร้างไฟล์ form องค์ประกอบที่มีช่องป้อนข้อความและปุ่มส่ง

eorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   <div>
      {{> myTemplate}}
   </div>
</body>
 
<template name = "myTemplate">
   <form>
      <input type = "text" name = "myForm">
      <input type = "submit" value = "SUBMIT">
   </form>
</template>

ในไฟล์ JavaScript เราจะสร้างไฟล์ submitเหตุการณ์. เราจำเป็นต้องป้องกันพฤติกรรมเหตุการณ์เริ่มต้นเพื่อหยุดการรีเฟรชเบราว์เซอร์ ต่อไปเราจะนำเนื้อหาของช่องป้อนข้อมูลและกำหนดให้textValue ตัวแปร.

ในตัวอย่างต่อไปนี้เราจะบันทึกเนื้อหานั้นลงในคอนโซลนักพัฒนาเท่านั้น และสิ่งสุดท้ายที่เราต้องการคือการล้างช่องป้อนข้อมูล

eorApp.js

if (Meteor.isClient) {

   Template.myTemplate.events({

      'submit form': function(event) {
         event.preventDefault();
         var textValue = event.target.myForm.value;
         console.log(textValue);
         event.target.myForm.value = "";
      }
   });
}

เมื่อเราพิมพ์ "ข้อความบางส่วน ... " ในช่องป้อนข้อมูลและส่งไปคอนโซลจะบันทึกข้อความที่เราป้อน

ปุ่มวิทยุ

สามารถใช้แนวคิดที่คล้ายกันสำหรับปุ่มตัวเลือก

eorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   <div>
      {{> myTemplate}}
   </div>
</body>
 
<template name = "myTemplate">
   <form>
      <input type = "radio" name = "myForm" value = "form-1">FORM 1
      <input type = "radio" name = "myForm" value = "form-2">FORM 2
      <input type = "submit" value = "SUBMIT">
   </form>
</template>

eorApp.js

if (Meteor.isClient) {

   Template.myTemplate.events({

      'submit form': function(event) {
         event.preventDefault();
         var radioValue = event.target.myForm.value;
         console.log(radioValue);
      }
   });
}

เมื่อเราส่งปุ่มแรกคอนโซลจะแสดงผลลัพธ์ต่อไปนี้

ช่องทำเครื่องหมาย

ตัวอย่างต่อไปนี้แสดงวิธีใช้ช่องทำเครื่องหมาย คุณจะเห็นได้ว่าเราเพิ่งทำกระบวนการเดิมซ้ำ

eorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   <div>
      {{> myTemplate}}
   </div>
</body>
 
<template name = "myTemplate">
   <form>
      <input type = "checkbox" name = "myForm" value = "form-1">FORM 1
      <input type = "checkbox" name = "myForm" value = "form-2">FORM 2
      <input type = "submit" value = "SUBMIT">
   </form>
</template>

eorApp.js

if (Meteor.isClient) {

   Template.myTemplate.events({
   
      'submit form': function(event) {
         event.preventDefault();
         var checkboxValue1 = event.target.myForm[0].checked;
         var checkboxValue2 = event.target.myForm[1].checked;
         console.log(checkboxValue1);
         console.log(checkboxValue2);
      }
   });
}

เมื่อส่งแบบฟอร์มข้อมูลที่เลือกจะถูกบันทึกเป็น trueในขณะที่รายการที่ไม่ได้เลือกจะถูกบันทึกเป็น false.

เลือกรายการแบบหล่นลง

ในตัวอย่างต่อไปนี้เราจะเรียนรู้วิธีใช้ไฟล์ selectธาตุ. เราจะใช้ไฟล์change เหตุการณ์ในการอัปเดตข้อมูลทุกครั้งที่มีการเปลี่ยนแปลงตัวเลือก

eorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   <div>
      {{> myTemplate}}
   </div>
</body>
 
<template name = "myTemplate">
   <select>
      <option name = "myOption" value = "option-1">OPTION 1</option>
      <option name = "myOption" value = "option-2">OPTION 2</option>
      <option name = "myOption" value = "option-3">OPTION 3</option>
      <option name = "myOption" value = "option-4">OPTION 4</option>
   </select>
</template>

eorApp.js

if (Meteor.isClient) {

   Template.myTemplate.events({

      'change select': function(event) {
         event.preventDefault();
         var selectValue = event.target.value;
         console.log(selectValue);
      }
   });
}

หากเราเลือกตัวเลือกที่สามคอนโซลจะบันทึกค่าตัวเลือก

ในบทนี้เราจะเรียนรู้วิธีการใช้งาน tag, class และ idเป็นตัวเลือกเหตุการณ์ การทำงานกับเหตุการณ์ค่อนข้างตรงไปตรงมา

มาสร้างองค์ประกอบสามอย่างในเทมเพลต HTML คนแรกคือpอันที่สองคือ myClass คลาสและสุดท้ายคือ myId id.

eorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   <div>
      {{> myTemplate}}
   </div>
</body>
 
<template name = "myTemplate">
   <p>PARAGRAPH...</p>
   <button class = "myClass">CLASS</button>
   <button id = "myId">ID</button>
</template>

ในไฟล์ JavaScript ของเราเรากำลังตั้งค่าสามเหตุการณ์สำหรับสามองค์ประกอบที่เราสร้างไว้ข้างต้น คุณจะเห็นได้ว่าเรากำลังเพิ่มp, .myClass และ #myId หลังจาก clickเหตุการณ์. เหล่านี้เป็นselectors ที่เรากล่าวถึงข้างต้น

eorApp.js

if (Meteor.isClient) {

   Template.myTemplate.events({

      'click p': function() {
         console.log("The PARAGRAPH is clicked...");
      },

      'click .myClass': function() {
         console.log("The CLASS is clicked...");
      },

      'click #myId': function() {
         console.log("The ID is clicked...");
      },
   });
}

เพื่อทดสอบสิ่งนี้ก่อนอื่นเราสามารถคลิกที่ PARAGRAPHแล้ว CLASS และสุดท้ายคือ IDปุ่ม. เราจะได้รับบันทึกคอนโซลต่อไปนี้

เราสามารถใช้เหตุการณ์ JavaScript อื่น ๆ ทั้งหมดเช่น click, dbclick, contextmenu, mousedown, mouseup, mouseover, mouseout, mousemove - ตามตัวอย่างด้านบน

เซสชันใช้สำหรับบันทึกข้อมูลในขณะที่ผู้ใช้กำลังใช้แอป ข้อมูลนี้จะถูกลบเมื่อผู้ใช้ออกจากแอป

ในบทนี้เราจะเรียนรู้วิธีการตั้งค่าวัตถุเซสชันจัดเก็บข้อมูลบางส่วนและส่งคืนข้อมูลนั้น เราจะใช้การตั้งค่า HTML พื้นฐาน

eorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   <div>
      {{> myTemplate}}
   </div>
</body>
 
<template name = "myTemplate">
</template>

ตอนนี้เราจะจัดเก็บ myData โดยใช้ในประเทศ Session.set()วิธี. เมื่อตั้งค่าวิธีการแล้วเราสามารถส่งคืนโดยใช้Session.get() วิธี.

eorApp.js

if (Meteor.isClient) {
  
   var myData = {
      key1: "value1",
      key2: "value2"
   }

   Session.set('mySession', myData);

   var sessionDataToLog = Session.get('mySession');
   console.log(sessionDataToLog);
}

หากเราตรวจสอบคอนโซลเราจะเห็นว่ามีการบันทึกข้อมูลที่จัดเก็บไว้

ในบทถัดไปเราจะเรียนรู้วิธีการอัปเดตเทมเพลตอัตโนมัติโดยใช้ตัวแปรเซสชัน

Tracker คือไลบรารีขนาดเล็กที่ใช้สำหรับการอัปเดตเทมเพลตอัตโนมัติเมื่อตัวแปร Session เปลี่ยนไป ในบทนี้เราจะเรียนรู้ว่าตัวติดตามทำงานอย่างไร

ขั้นแรกเราจะสร้างไฟล์ button ที่จะใช้สำหรับการอัปเดตเซสชัน

eorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   <div>
      {{> myTemplate}}
   </div>
</body>
 
<template name = "myTemplate">
   <button id = "myButton">CLICK ME</button>
</template>

ต่อไปเราจะตั้งค่าเซสชันเริ่มต้น myData และสร้างไฟล์ mySession วัตถุ. Tracker.autorun วิธีนี้ใช้ในการจับตาดู mySession. เมื่อใดก็ตามที่วัตถุนี้เปลี่ยนแปลงเทมเพลตจะอัปเดตอัตโนมัติ ในการทดสอบเราจะตั้งค่าเหตุการณ์การคลิกสำหรับการอัปเดต

eorApp.js

if (Meteor.isClient) {
  
   var myData = 0
   Session.set('mySession', myData);

   Tracker.autorun(function () {
      var sessionData = Session.get('mySession');
      console.log(sessionData)
   });

   Template.myTemplate.events({

      'click #myButton': function() {
         Session.set('mySession', myData ++);
      }
   });
}

หากเราคลิกไฟล์ CLICK ME ปุ่มห้าครั้งเราจะเห็นว่าตัวติดตามกำลังบันทึกค่าใหม่ทุกครั้งที่มีการอัปเดตเซสชัน

Meteor นำเสนอแพ็คเกจชุมชนหลายพันรายการที่คุณสามารถใช้ได้ในขณะที่พัฒนาแอพของคุณ

การเพิ่มแพ็คเกจ

คุณสามารถตรวจสอบอย่างเป็นทางการเซิร์ฟเวอร์แพคเกจดาวตกที่นี่ เพียงค้นหาแพ็คเกจที่คุณต้องการและเพิ่มลงในหน้าต่างพรอมต์คำสั่ง ตัวอย่างเช่นหากคุณต้องการเพิ่มhttp แพคเกจไปยังแอปของคุณคุณสามารถทำได้โดยเรียกใช้รหัสต่อไปนี้ -

C:\Users\username\Desktop\meteorApp>meteor add http

การลบแพ็คเกจ

หลักการที่คล้ายกันนี้สามารถใช้เพื่อลบแพ็คเกจ -

C:\Users\username\Desktop\meteorApp>meteor remove http

การอัปเดตแพ็คเกจ

คุณสามารถอัปเดตแพ็คเกจที่ใช้รหัสต่อไปนี้ -

C:\Users\username\Desktop\meteorApp>meteor update http

กำลังตรวจสอบแพ็คเกจปัจจุบัน

คุณยังตรวจสอบได้ว่าแอปพลิเคชันปัจจุบันของคุณใช้แพ็กเกจใดอยู่

C:\Users\username\Desktop\meteorApp>meteor list

การบำรุงรักษาแพ็คเกจ

หากแพ็คเกจมี : ในชื่อนี้หมายความว่าเป็นแพ็คเกจชุมชนในขณะที่กลุ่มที่ไม่มีคำนำหน้าจะได้รับการดูแลโดยกลุ่มพัฒนาดาวตก

การเพิ่มแพ็คเกจ Meteor Development Group

C:\Users\username\Desktop\meteorApp>meteor add http

การเพิ่มแพ็คเกจชุมชน

C:\Users\username\Desktop\meteorApp>meteor add cfs:http-methods

หากคุณต้องการ จำกัด โค้ดให้ทำงานเฉพาะบนเซิร์ฟเวอร์หรือฝั่งไคลเอ็นต์คุณสามารถใช้รหัสต่อไปนี้ -

eorApp.js

if (Meteor.isClient) {
   // Code running on client...
}

if (Meteor.isServer) {
   // Code running on server...
}

คุณสามารถ จำกัด รหัสให้ทำงานเฉพาะเมื่อแอปใช้ Cordova บันเดิล

if (Meteor.isCordova) {
   // Code running on Cordova...
}

ปลั๊กอินบางตัวต้องรอจนกว่าเซิร์ฟเวอร์และ DOM จะพร้อม คุณสามารถใช้รหัสต่อไปนี้เพื่อรอจนกว่าทุกอย่างจะเริ่มขึ้น

Meteor.startup(function () {
   // Code running after platform is ready...
});

ตารางต่อไปนี้แสดงวิธี API หลักอื่น ๆ

ซีเนียร์ วิธีการและรายละเอียด
1

Meteor.wrapAsync(function)

ใช้สำหรับตัดโค้ดอะซิงโครนัสและแปลงเป็นซิงโครนัส

2

Meteor.absoluteUrl([path], [options])

ใช้สำหรับสร้าง URL ที่สมบูรณ์ที่ชี้ไปที่แอป

3

Meteor.settings

ใช้สำหรับตั้งค่าคอนฟิกการปรับใช้

4

Meteor.publish(name, function)

ใช้สำหรับการเผยแพร่บันทึกไปยังไคลเอนต์

วิธีการตรวจสอบใช้เพื่อดูว่าอาร์กิวเมนต์หรือประเภทตรงกับรูปแบบหรือไม่

การติดตั้งแพ็กเกจตรวจสอบ

เปิดหน้าต่างพรอมต์คำสั่งและติดตั้งแพ็คเกจ

C:\Users\username\Desktop\meteorApp>meteor add check

ใช้เช็ค

ในตัวอย่างต่อไปนี้เราต้องการตรวจสอบว่า myValueเป็นสตริง เนื่องจากเป็นความจริงแอปจะดำเนินการต่อโดยไม่มีข้อผิดพลาดใด ๆ

eorApp.js

var myValue = 'My Value...';
check(myValue, String);

ในตัวอย่างนี้ myValue ไม่ใช่สตริง แต่เป็นตัวเลขดังนั้นคอนโซลจะบันทึกข้อผิดพลาด

eorApp.js

var myValue = 1;
check(myValue, String);

การทดสอบการจับคู่

Match.test คล้ายกับการตรวจสอบความแตกต่างเมื่อการทดสอบล้มเหลวแทนที่จะเป็นข้อผิดพลาดของคอนโซลเราจะได้รับไฟล์ valueโดยไม่ทำลายเซิร์ฟเวอร์ ตัวอย่างต่อไปนี้แสดงวิธีการทดสอบวัตถุที่มีหลายปุ่ม

eorApp.js

var myObject = {
   key1 : "Value 1...",
   key2 : "Value 2..."
}

var myTest = Match.test(myObject, {
   key1: String,
   key2: String
});

if ( myTest ) {
   console.log("Test is TRUE...");
} else {
   console.log("Test is FALSE...");
}

เนื่องจากคีย์ทั้งสองเป็นสตริงการทดสอบจึงเป็น true. คอนโซลจะบันทึกตัวเลือกแรก

ถ้าเราเปลี่ยน key2 การทดสอบจะล้มเหลวและคอนโซลจะบันทึกตัวเลือกที่สอง

eorApp.js

var myObject = {
   key1 : "Value 1...",
   key2 : 1
}

var myValue = 1;

var myTest = Match.test(myObject, {
   key1: String,
   key2: String
});

if ( myTest ) {
   console.log("Test is TRUE...");
} else {
   console.log("Test is FALSE...");
}

Blaze เป็นแพ็คเกจ Meteor สำหรับการสร้างเทมเพลตปฏิกิริยาสด

วิธีการแสดงผล

วิธีนี้ใช้สำหรับการแสดงเทมเพลตใน DOM ขั้นแรกเราจะสร้างmyNewTemplateที่จะแสดงผล นอกจากนี้เรายังจะเพิ่มmyContainerซึ่งจะใช้เป็นองค์ประกอบหลักดังนั้นไฟล์ render เมธอดรู้ตำแหน่งที่จะแสดงเทมเพลตของเรา

eorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   <div id = "myContainer">
   </div>
</body>

<template name = "myNewTemplate">
   <p>Text from my new template...</p>
</template>

ต่อไปเราจะสร้างฟังก์ชันการแสดงผลที่จะใช้อาร์กิวเมนต์สองตัว อันแรกคือเทมเพลตที่จะแสดงผลและอันที่สองเป็นองค์ประกอบหลักที่เรากล่าวถึงข้างต้น

eorApp.js

Meteor.startup(function () {

   if(Meteor.isClient) {
      var myNewTemplate = Template.myNewTemplate;
      var myContainer = document.getElementById('myContainer');
      Blaze.render(myNewTemplate, myContainer);
   }
});

แสดงผลด้วยข้อมูล

หากคุณต้องการส่งผ่านข้อมูลบางอย่างในเชิงโต้ตอบคุณสามารถใช้ renderWithDataวิธี. HTML จะเหมือนกับในตัวอย่างก่อนหน้านี้ทุกประการ

eorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   <div id = "myContainer">
   </div>
</body>

<template name = "myNewTemplate">
   <p>Text from my new template...</p>
</template>

เราสามารถเพิ่มข้อมูลของเราเป็นอาร์กิวเมนต์ที่สองใน Meteor.renderWithDataวิธี. อีกสองอาร์กิวเมนต์จะเหมือนกับในตัวอย่างก่อนหน้านี้ ในตัวอย่างนี้ข้อมูลของเราคือฟังก์ชันที่จะบันทึกข้อความบางส่วน

eorApp.js

Meteor.startup(function () {

   if(Meteor.isClient) {
      var myNewTemplate = Template.myNewTemplate;
		
      var myData = function() {
         console.log('Log from the data object...')
      }

      var myContainer = document.getElementById('myContainer');
      Blaze.renderWithData(myNewTemplate, myData, myContainer);
   }
});

ลบวิธีการ

เราสามารถเพิ่ม remove วิธี.

eorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   <div id = "myContainer">
   </div>
</body>

<template name = "myNewTemplate">
   <p>Text from my new template...</p>
</template>

ในตัวอย่างนี้เรากำลังแสดงเทมเพลตที่จะถูกลบออกหลังจากสามวินาที สังเกตBlaze.Remove วิธีที่เราใช้เพื่อลบเทมเพลต

eorApp.js

Meteor.startup(function () {

   if(Meteor.isClient) {
      var myNewTemplate = Template.myNewTemplate;
      var myContainer = document.getElementById('myContainer');
      var myRenderedTemplate = Blaze.render(myNewTemplate, myContainer);

      Meteor.setTimeout(function() {
         Blaze.remove(myRenderedTemplate);
      }, 3000);
   }
});

ตารางต่อไปนี้แสดงวิธีการอื่น ๆ ที่สามารถใช้ได้

ซีเนียร์ วิธีการและรายละเอียด
1

Blaze.getData([elementOrView])

ใช้สำหรับดึงข้อมูลจากองค์ประกอบการแสดงผล

2

Blaze.toHTML(templateOrView)

ใช้สำหรับการแสดงเทมเพลตหรือมุมมองไปยังสตริง

3

Blaze.toHTMLWithData(templateOrView, data)

ใช้สำหรับการแสดงเทมเพลตหรือมุมมองไปยังสตริงที่มีข้อมูลเพิ่มเติม

4

new Blaze.View([name], renderFunction)

ใช้สำหรับสร้างส่วนปฏิกิริยา Blaze ใหม่ของ DOM

5

Blaze.currentView

ใช้สำหรับรับมุมมองปัจจุบัน

6

Blaze.getView([element])

ใช้สำหรับรับมุมมองปัจจุบัน

7

Blaze.With(data, contentFunc)

ใช้สำหรับสร้างมุมมองที่แสดงเนื้อหาบางส่วนพร้อมบริบท

8

Blaze.If(conditionFunc, contentFunc, [elseFunc])

ใช้สำหรับสร้างมุมมองที่แสดงเนื้อหาที่มีเงื่อนไขบางอย่าง

9

Blaze.Unless(conditionFunc, contentFunc, [elseFunc])

ใช้สำหรับสร้างมุมมองที่แสดงเนื้อหาตามเงื่อนไขบางอย่าง (กลับด้าน Blaze.if).

10

Blaze.Each(argFunc, contentFunc, [elseFunc])

ใช้สำหรับสร้างมุมมองที่แสดงผล contentFunct สำหรับทุกรายการ

11

new Blaze.Template([viewName], renderFunction)

ใช้สำหรับสร้างมุมมอง Blaze ใหม่พร้อมชื่อและเนื้อหา

12

Blaze.isTemplate(value)

ใช้สำหรับส่งคืนค่าจริงหากค่าเป็นวัตถุเทมเพลต

Meteor เสนอของตัวเอง setTimeout และ setIntervalวิธีการ วิธีการเหล่านี้ใช้เพื่อให้แน่ใจว่าตัวแปรส่วนกลางทั้งหมดมีค่าที่ถูกต้อง ทำงานเหมือน JavaScript ทั่วไปsetTimout และ setInterval.

หมดเวลา

นี่คือ Meteor.setTimeout ตัวอย่าง.

Meteor.setTimeout(function() {
   console.log("Timeout called after three seconds...");
}, 3000);

เราจะเห็นในคอนโซลว่าฟังก์ชันหมดเวลาถูกเรียกใช้เมื่อแอปเริ่มทำงานแล้ว

ช่วงเวลา

ตัวอย่างต่อไปนี้แสดงวิธีการตั้งค่าและล้างช่วงเวลา

eorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   <div>
      {{> myTemplate}}
   </div>
</body>
 
<template name = "myTemplate">
   <button>CLEAR</button>
</template>

เราจะตั้งค่าเริ่มต้น counter ตัวแปรที่จะได้รับการอัปเดตหลังจากการเรียกทุกช่วงเวลา

eorApp.js

if (Meteor.isClient) {

   var counter = 0;

   var myInterval = Meteor.setInterval(function() {
      counter ++
      console.log("Interval called " + counter + " times...");
   }, 3000);

   Template.myTemplate.events({

      'click button': function() {
         Meteor.clearInterval(myInterval);
         console.log('Interval cleared...')
      }
   });
}

คอนโซลจะบันทึกการอัปเดต counterแปรผันทุกสามวินาที เราสามารถหยุดสิ่งนี้ได้โดยคลิกที่ไฟล์CLEARปุ่ม. ซึ่งจะเรียกไฟล์clearInterval วิธี.

EJSON เป็นส่วนขยายของไวยากรณ์ JSON ที่รองรับ Date และ Binary ประเภท

ติดตั้ง EJSON

ในการติดตั้งแพ็คเกจ EJSON เราจำเป็นต้องเพิ่มจากหน้าต่างพรอมต์คำสั่ง

C:\Users\username\Desktop\meteorApp>meteor add ejson

ตัวอย่างวันที่

เราสามารถ deserialize ไฟล์ date ใช้ parse วิธี.

if (Meteor.isClient) {
   var myEjsonDate = '{"$date": 1455029631493}';
   var myDate = EJSON.parse(myEjsonDate);
   console.log(myDate);
}

คอนโซลจะบันทึกค่าวันที่ที่ถูกต้อง

ตัวอย่างไบนารี

สามารถใช้ได้กับประเภทไบนารี

if (Meteor.isClient) {
   var myEjsonBinary = '{"$binary": "c3VyZS4="}';
   var myBinary = EJSON.parse(myEjsonBinary);
   console.log(myBinary);
}

คุณจะเห็นว่าคอนโซลกำลังบันทึกค่า deserialized ใหม่

สตริง

เราสามารถจัดลำดับวัตถุโดยใช้ไฟล์ stringifyวิธี. นี่คือกระบวนการย้อนกลับจากตัวอย่างด้านบน

if (Meteor.isClient) {

   var myObject = {
      myDate : new Date(),
      myBinary : new Uint8Array([115, 117, 114, 101, 46])
   }

   var myEjosnData = EJSON.stringify(myObject);
   console.log(myEjosnData);
}

เราสามารถดูค่าใหม่ของเราได้ในคอนโซล

ซีเนียร์ วิธีการและรายละเอียด
1

EJSON.parse(string)

ใช้สำหรับการแยกสตริงเป็นค่า EJSON

2

EJSON.stringify(value)

ใช้สำหรับการจัดลำดับค่าให้กับสตริง

3

EJSON.fromJSONValue(value)

ใช้สำหรับ deserializing ค่า EJSON จาก JSON

4

EJSON.toJSONValue(value)

ใช้สำหรับการจัดลำดับค่า EJSON เป็น JSON

5

EJSON.equals(value1, value2)

ใช้สำหรับเปรียบเทียบว่าค่าสองค่าเท่ากันหรือไม่

6

EJSON.clone(value)

ใช้สำหรับส่งคืนสำเนาลึกของค่า

7

EJSON.newBinary

ใช้สำหรับกำหนดข้อมูลไบนารีที่ EJSON สามารถทำให้เป็นอนุกรมได้

8

EJSON.isBinary(x)

ใช้สำหรับตรวจสอบว่าค่าเป็นข้อมูลไบนารีหรือไม่

9

EJSON.addType(name, factory)

ใช้สำหรับสร้างประเภท EJSON ที่กำหนดเอง

10

customType.typeName()

ใช้สำหรับส่งคืนชื่อประเภทกำหนดเอง

11

customType.toJSONValue()

ใช้สำหรับการกำหนดลำดับประเภทที่กำหนดเอง

12

customType.clone()

ใช้สำหรับส่งคืนสำเนาลึกของประเภทกำหนดเอง

13

customType.equals(otherValue)

ใช้สำหรับเปรียบเทียบระหว่างค่าประเภทที่กำหนดเองกับค่าอื่น ๆ

แพคเกจนี้จัดเตรียม API คำขอ HTTP ด้วย get, post, put และ delete วิธีการ

ติดตั้ง Package

เราจะติดตั้งแพ็คเกจนี้โดยเรียกใช้รหัสต่อไปนี้ในหน้าต่างพรอมต์คำสั่ง

C:\Users\username\Desktop\meteorApp>meteor add http

วิธีการโทร

นี่เป็นวิธีสากลที่สามารถใช้ได้ GET, POST, PUT และ DELETEข้อโต้แย้ง ตัวอย่างต่อไปนี้สาธิตวิธีการใช้งานGETการโต้เถียง. ตัวอย่างในบทนี้จะใช้ REST API ปลอมจากเว็บไซต์นี้

คุณจะเห็นได้ว่าวิธีนี้ใช้อาร์กิวเมนต์สี่ตัว เราได้กล่าวถึงข้อโต้แย้งแรกแล้วGET. อันที่สองคือ API URL อาร์กิวเมนต์ที่สามคืออ็อบเจ็กต์ว่างซึ่งเราสามารถตั้งค่าพารามิเตอร์ทางเลือกบางอย่างได้ วิธีสุดท้ายคือการโทรกลับแบบอะซิงโครนัสซึ่งเราสามารถจัดการข้อผิดพลาดและทำงานกับการตอบกลับได้

HTTP.call( 'GET', 'http://jsonplaceholder.typicode.com/posts/1', {},
   function( error, response ) {

   if (error) {
      console.log(error);
   } else {
      console.log(response);
   }
});

รับวิธีการ

สามารถส่งคำขอเดียวกันโดยใช้ GET แทน CALLวิธี. คุณจะเห็นว่าอาร์กิวเมนต์แรกตอนนี้คือ URL ของ API

HTTP.get('http://jsonplaceholder.typicode.com/posts/1', {}, function( error, response ) {

   if ( error ) {
      console.log( error );
   } else {
      console.log( response );
   }
});

ทั้งสองตัวอย่างก่อนหน้านี้จะบันทึกเอาต์พุตเดียวกัน

วิธีการโพสต์

ในวิธีนี้เรากำลังตั้งค่าข้อมูลที่ต้องการส่งไปยังเซิร์ฟเวอร์ (postData) เป็นอาร์กิวเมนต์ที่สอง อย่างอื่นเหมือนกับในไฟล์GET คำขอ.

var postData = {

   data: {
      "name1": "Value1",
      "name2": "Value2",
   }
}

HTTP.post( 'http://jsonplaceholder.typicode.com/posts', postData, 
   function( error, response ) {

   if ( error ) {
      console.log( error );
   } else {
      console.log( response);
   }
});

คอนโซลจะบันทึกไฟล์ postData วัตถุ.

วิธีการวาง

เราสามารถอัปเดตข้อมูลของเราโดยใช้ไฟล์ PUTวิธี. แนวคิดเหมือนกับในตัวอย่างสุดท้ายของเรา

var updateData = {

   data: {
      "updatedName1": "updatedValue1",
      "UpdatedName2": "updatedValue2",
   }
}

HTTP.put( 'http://jsonplaceholder.typicode.com/posts/1', updateData, 
   function( error, response ) {
	
   if ( error ) {
      console.log( error );
   } else {
      console.log( response );
   }
});

ตอนนี้เราสามารถเห็นวัตถุที่อัปเดตของเราในคอนโซล

วิธี DEL

เราสามารถส่งคำขอลบไปยังเซิร์ฟเวอร์โดยใช้ไฟล์ DELวิธี. เราจะลบทุกอย่างภายในไฟล์data วัตถุ.

var deleteData = {
   data: {}
}

HTTP.del( 'http://jsonplaceholder.typicode.com/posts/1', deleteData, 
   function( error, response ) {
	
   if ( error ) {
      console.log( error );
   } else {
      console.log( response );
   }
});

คอนโซลจะแสดงว่ากระบวนการลบสำเร็จ

แพ็คเกจนี้ใช้เมื่อคุณต้องการส่งอีเมลจาก Meteor App

ขั้นตอนที่ 1 - เพิ่มแพ็คเกจ

เปิดหน้าต่างพรอมต์คำสั่งและเรียกใช้คำสั่งต่อไปนี้ -

C:\Users\username\Desktop\meteorApp>meteor add email

ขั้นตอนที่ 2 - บัญชี Mailgun

เราจำเป็นต้องสร้างบัญชีผู้ใช้ที่นี่ นี่คือผู้ให้บริการอีเมลเริ่มต้นสำหรับแอป Meteor

หลังจากที่คุณเข้าสู่ระบบแล้วให้เปิดไฟล์ Domains แล้วคลิกแท็บ sandbox URL ใต้ Domain Name. มันจะเปิดหน้าใหม่ที่เราสามารถค้นหาได้Default SMTP Login และ Default Password. เราจะต้องใช้สองสิ่งนี้ในการสร้างไฟล์MAIL_URL ตัวแปรสภาพแวดล้อม

ส่งอีเมล

เพื่อสร้างไฟล์ MAIL_URL เพียงใส่ข้อมูลรับรอง Mailgun ของคุณแทนไฟล์ YOUR_DEFAULT_SMTP_LOGIN และ YOUR_DEFAULT_PASSWORD.

if (Meteor.isServer) {

   Meteor.startup( function() {
      process.env.MAIL_URL = 
         "smtp://YOUR_DEFAULT_SMTP_LOGIN:[email protected]:587";

      Email.send({
         to: "[email protected]",
         from: "[email protected]",
         subject: "Meteor Email",
         text: "The email content..."
      });
   });
}

เมื่อคุณเรียกใช้แอปอีเมลจะถูกส่งไปยังที่อยู่ของคุณ

สินทรัพย์เซิร์ฟเวอร์คงอยู่ในไฟล์ privateโฟลเดอร์ย่อยภายในแอป ในตัวอย่างต่อไปนี้เราจะเรียนรู้วิธีใช้ข้อมูลจากไฟล์ JSON แบบธรรมดา

ขั้นตอนที่ 1 - สร้างไฟล์และโฟลเดอร์

มาสร้างไฟล์ private โฟลเดอร์และ my-json.jsonไฟล์ภายในโฟลเดอร์นั้น เราจะทำสิ่งนี้โดยใช้คำสั่งต่อไปนี้ในไฟล์command prompt อย่างไรก็ตามคุณสามารถสร้างด้วยตนเองได้

C:\Users\username\Desktop\meteorApp>mkdir private

C:\Users\username\Desktop\meteorApp\private>touch my-json.json

ขั้นตอนที่ 2 - รับข้อความ

เพื่อให้สามารถอ่านข้อมูลจากไฟล์ของเราเราจะใช้ Asssets.getTextวิธี. หมายเหตุสามารถทำได้จากฝั่งเซิร์ฟเวอร์เท่านั้น เนื่องจากเราใช้ JSON เราจึงต้องแยกวิเคราะห์

if (Meteor.isServer) {
   var myFile = JSON.parse(Assets.getText('my-json.json'));
   console.log(myFile.data.text)
}

ต่อไปนี้จะเป็นผลลัพธ์ในหน้าต่างพรอมต์คำสั่ง

ขั้นตอนที่ 3 - สร้างไฟล์ EJSON

เราจะสร้างไฟล์นี้ภายในไฟล์ privateโฟลเดอร์ ไฟล์นี้จะมีข้อมูลไบนารี"myBinary": {"$binary": "c3VyZS4="}

C:\Users\username\Desktop\meteorApp\private>touch my-ejson.ejson

ขั้นตอนที่ 4 - รับไบนารี

ในการอ่านไฟล์ EJSON เราสามารถใช้ไฟล์ Assets.getBinary วิธี.

if (Meteor.isServer) {
   var myFile = Assets.getBinary('my-ejson.ejson');
   console.log(EJSON.stringify(myFile));
}

พรอมต์คำสั่งจะบันทึกค่า EJSON

ในบทนี้เราจะเรียนรู้วิธีรักษาความปลอดภัยแอพของเราและสิ่งที่ควรนำมาพิจารณาในขณะพัฒนาแอพ

เผยแพร่อัตโนมัติและการรักษาความปลอดภัยอัตโนมัติ

Autopublishเป็นแพ็คเกจที่เผยแพร่ข้อมูลทั้งหมดจากฐานข้อมูลไปยังไคลเอนต์โดยอัตโนมัติ นี่คือความสะดวกที่ควรปิดใช้งานเมื่ออยู่ในการผลิต สามารถปิดใช้งานได้จากพรอมต์คำสั่ง

C:\Users\username\Desktop\meteorApp>meteor remove autopublish

คุณสามารถเผยแพร่ข้อมูลบางส่วนไปยังไคลเอนต์ได้โดยใช้ Meteor.publish() และ Meteor.subscribe() วิธีการที่เราจะกล่าวถึงในบทเผยแพร่และสมัครสมาชิก

Insecureเป็นแพ็คเกจที่อนุญาตให้เขียนคำสั่ง MongoDB ในคอนโซลของผู้พัฒนาเพื่อให้ผู้ใช้แอปทุกคนสามารถเข้าถึงฐานข้อมูลได้ สามารถลบแพ็กเกจได้โดยรันคำสั่งต่อไปนี้ในพรอมต์คำสั่ง

C:\Users\username\Desktop\meteorApp>meteor remove insecure

แนวทางปฏิบัติที่ดีคือการลบทั้งสองแพ็กเกจทันทีที่คุณเริ่มพัฒนาแอพของคุณคุณจึงไม่ต้องเปลี่ยนและอัปเดตโค้ดในภายหลัง

ใช้วิธีการฝั่งเซิร์ฟเวอร์

คุณควรสร้างวิธีการของคุณบนเซิร์ฟเวอร์เสมอ คุณสามารถทำได้โดยใช้ไฟล์Meteor.methods() บนเซิร์ฟเวอร์และ Meteor.call()บนไคลเอนต์ เราจะเรียนรู้เพิ่มเติมเกี่ยวกับเรื่องนี้ในบทวิธีการ

ความปลอดภัยเพิ่มเติม

หากคุณต้องการเพิ่มชั้นความปลอดภัยเพิ่มเติมให้กับแอปของคุณคุณควรพิจารณาใช้แพ็คเกจ Meteor อื่น ๆ เช่น -

  • สามารถใช้นโยบายเบราว์เซอร์เพื่อควบคุมทรัพยากรภายนอกที่ควรโหลดลงในแอปของคุณ

  • ตรวจสอบแพ็กเกจสามารถใช้เพื่อตรวจสอบประเภทอินพุตของผู้ใช้ก่อนที่จะประมวลผล

  • การตรวจสอบอาร์กิวเมนต์ตรวจสอบเป็นแพ็คเกจที่จะทำให้แน่ใจว่าพารามิเตอร์ทั้งหมดได้รับการตรวจสอบอย่างถูกต้องก่อนที่จะประมวลผล หากคุณพลาดพารามิเตอร์บางตัวแพ็คเกจนี้จะแจ้งให้คุณทราบ

  • แพ็คเกจMylarสามารถเพิ่มชั้นความปลอดภัยเพิ่มเติมได้ คุณสามารถตรวจสอบได้ว่าคุณต้องการการปกป้องแบบนั้นหรือไม่

เราสามารถจัดเรียงข้อมูลเมื่อเราได้รับจากฐานข้อมูล ในตัวอย่างต่อไปนี้เราจะสร้างUsersคอลเลกชัน เราจะใช้ไฟล์sort การโต้เถียง ({sort: {name: 1}}) สำหรับจัดเรียงข้อมูลคอลเลกชันตามชื่อ จำนวน1ใช้เพื่อกำหนดลำดับจากน้อยไปมาก ถ้าเราต้องการใช้จากมากไปหาน้อยเราจะใช้-1 แทน.

Users = new Mongo.Collection('users');

Users.insert({
   name: 'James',
   email: '[email protected]',
   joined: new Date(2016, 2, 23)
});

Users.insert({
   name: 'John',
   email: '[email protected]',
   joined: new Date(2016, 2, 19)
});

Users.insert({
   name: 'Jennifer',
   email: '[email protected]',
   joined: new Date(2016, 6, 24)
});

var sortByName = Users.find({}, {sort: {name: 1}}).fetch();

var sortByEmail = Users.find({}, {sort: {email: 1}}).fetch();

var sortByJoined = Users.find({}, {sort: {joined: 1}}).fetch();

console.log(sortByName);
console.log(sortByEmail);
console.log(sortByJoined);

เราสามารถจัดเรียงข้อมูลทางอีเมลได้ในลักษณะเดียวกัน

Users = new Mongo.Collection('users');

Users.insert({
   name: 'James',
   email: '[email protected]',
   joined: new Date(2016, 2, 23)
});

Users.insert({
   name: 'John',
   email: '[email protected]',
   joined: new Date(2016, 2, 19)
});

Users.insert({
   name: 'Jennifer',
   email: '[email protected]',
   joined: new Date(2016, 6, 24)
});

var sortByEmail = Users.find({}, {sort: {email: 1}}).fetch();

console.log(sortByEmail);

สุดท้ายเราสามารถจัดเรียงตามวันที่เข้าร่วมได้

Users = new Mongo.Collection('users');

Users.insert({
   name: 'James',
   email: '[email protected]',
   joined: new Date(2016, 2, 23)
});

Users.insert({
   name: 'John',
   email: '[email protected]',
   joined: new Date(2016, 2, 19)
});

Users.insert({
   name: 'Jennifer',
   email: '[email protected]',
   joined: new Date(2016, 6, 24)
});

var sortByJoined = Users.find({}, {sort: {joined: 1}}).fetch();

console.log(sortByJoined);

แพคเกจนี้ช่วยให้สามารถตรวจสอบผู้ใช้งานได้อย่างสมบูรณ์ คุณสามารถเพิ่มได้โดยเรียกใช้รหัสต่อไปนี้ในหน้าต่างพรอมต์คำสั่ง

C:\Users\username\Desktop\meteorApp>meteor add accounts-password

ตัวอย่างการพิสูจน์ตัวตน

ตัวอย่างนี้จะแสดงการพิสูจน์ตัวตนพื้นฐาน เราจะสร้างregister, loginและ homeเทมเพลต หากมีไฟล์currentUser (หากผู้ใช้ลงทะเบียนหรือเข้าสู่ระบบสำเร็จ) ไฟล์ homeเทมเพลตจะปรากฏขึ้น ถ้าไม่มีcurrentUser, register และ login แม่แบบจะมองเห็นได้

eorApp.html

<head>
   <title>meteorApp</title>
</head>
 
<body>
   {{#if currentUser}}
      {{> home}}
      {{else}}
      {{> register}}
      {{> login}}
   {{/if}}
</body>

<template name = "register">
   <h2>REGISTER:</h2>
   <form>
      <input type = "email" name = "registerEmail"><br>
      <input type = "password" name = "registerPassword"><br>
      <input type = "submit" value = "Register"><br>
   </form>
</template>

<template name = "login">
   <h2>LOGIN:</h2>
   <form>
      <input type = "email" name = "loginEmail"><br>
      <input type = "password" name="loginPassword"><br>
      <input type = "submit" value = "Login"><br>
   </form>
</template>

<template name = "home">
   <p>You're logged in.</p>
   <button class = "logout">Logout</button>
</template>

ขั้นแรกเราต้องสร้างไฟล์ registerเหตุการณ์. ฟังก์ชันนี้จะอ่านข้อมูลการลงทะเบียนสร้างผู้ใช้ใหม่และจัดเก็บไว้ในฐานข้อมูล

เหตุการณ์ที่สองคือ login. คราวนี้ฟังก์ชั่นจะอ่านอินพุตจากไฟล์login แม่แบบเข้าสู่ระบบผู้ใช้หากอีเมลและรหัสผ่านถูกต้องหรือส่งคืนข้อผิดพลาดหากไม่เป็นเช่นนั้น

และสุดท้าย logout เหตุการณ์จะถูกใช้เพื่อล็อกเอาต์ผู้ใช้เมื่อคลิกปุ่ม

eorApp.js

if (Meteor.isClient) {

   Template.register.events({
      'submit form': function(event) {
         event.preventDefault();

         var registerData = {
            email: event.target.registerEmail.value,
            password: event.target.registerPassword.value
         }

         Accounts.createUser(registerData, function(error) {
         
            if (Meteor.user()) {
               console.log(Meteor.userId());
            } else {
               console.log("ERROR: " + error.reason);
            }
         });
      }
   });

   Template.login.events({
   
      'submit form': function(event) {
         event.preventDefault();
         var myEmail = event.target.loginEmail.value;
         var myPassword = event.target.loginPassword.value;
			
         Meteor.loginWithPassword(myEmail, myPassword, function(error) {

            if (Meteor.user()) {
               console.log(Meteor.userId());
            } else {
               console.log("ERROR: " + error.reason);
            }
         });
      }
   });

   Template.home.events({

      'click .logout': function(event) {
         event.preventDefault();
			
         Meteor.logout(function(error) {

            if(error) {
               console.log("ERROR: " + error.reason);
            }
         });
      }
   });
}

เมื่อแอปเริ่มขึ้นเราจะได้รับหน้าต่อไปนี้

ในการป้อนอีเมลและรหัสผ่านในไฟล์ registerแบบฟอร์มเราสามารถลงทะเบียนและเข้าสู่ระบบผู้ใช้ใหม่ เราจะเห็นว่าคอนโซลบันทึกผู้ใช้id และ home เทมเพลตถูกแสดงผล

loginเหตุการณ์จะตรวจสอบฐานข้อมูลและเข้าสู่ระบบผู้ใช้หากอีเมลและรหัสผ่านถูกต้อง มิฉะนั้นคอนโซลจะบันทึกข้อผิดพลาด

หากผู้ใช้คลิกไฟล์ LOGOUT แอพจะล็อกผู้ใช้ออกและแสดงไฟล์ register และ login เทมเพลต

เมธอด Meteor เป็นฟังก์ชันที่เขียนบนฝั่งเซิร์ฟเวอร์ แต่สามารถเรียกได้จากฝั่งไคลเอ็นต์

ในฝั่งเซิร์ฟเวอร์เราจะสร้างสองวิธีง่ายๆ อันแรกจะเพิ่ม 5 ให้กับอาร์กิวเมนต์ของเราในขณะที่อันที่สองจะเพิ่ม10.

การใช้วิธีการ

eorApp.js

if(Meteor.isServer) {

   Meteor.methods({

      method1: function (arg) {
         var result = arg + 5;
         return result;
      },

      method2: function (arg) {
         var result = arg + 10;
         return result;
      }
   });
}

if(Meteor.isClient) {
   var aaa = 'aaa'
   Meteor.call('method1', aaa, function (error, result) {
	
      if (error) {
         console.log(error);
         else {
            console.log('Method 1 result is: ' + result);
         }
      }
   );

   Meteor.call('method2', 5, function (error, result) {

      if (error) {
         console.log(error);
      } else {
         console.log('Method 2 result is: ' + result);
      }
   });
}

เมื่อเราเริ่มแอพเราจะเห็นค่าที่คำนวณในคอนโซล

การจัดการข้อผิดพลาด

สำหรับการจัดการข้อผิดพลาดคุณสามารถใช้ไฟล์ Meteor.Errorวิธี. ตัวอย่างต่อไปนี้แสดงวิธีจัดการข้อผิดพลาดสำหรับผู้ใช้ที่ไม่ได้เข้าสู่ระบบ

if(Meteor.isServer) {

   Meteor.methods({

      method1: function (param) {

         if (! this.userId) {
            throw new Meteor.Error("logged-out",
               "The user must be logged in to post a comment.");
         }
         return result;
      }
   });
}

if(Meteor.isClient) {  Meteor.call('method1', 1, function (error, result) {

   if (error && error.error === "logged-out") {
      console.log("errorMessage:", "Please log in to post a comment.");
   } else {
      console.log('Method 1 result is: ' + result);
   }});

}

คอนโซลจะแสดงข้อความแสดงข้อผิดพลาดที่เรากำหนดเอง

ในบทนี้เราจะเรียนรู้วิธีสร้างแพ็คเกจดาวตกของเราเอง

การสร้างแพ็คเกจ

มาเพิ่มโฟลเดอร์ใหม่บนเดสก์ท็อปซึ่งจะสร้างแพ็คเกจ เราจะใช้หน้าต่างพร้อมรับคำสั่ง

C:\Users\username\Desktop\meteorApp> mkdir packages

ตอนนี้เราสามารถสร้างแพ็คเกจในโฟลเดอร์ที่เราสร้างไว้ด้านบน เรียกใช้คำสั่งต่อไปนี้จากพรอมต์คำสั่งUsername คือชื่อผู้ใช้ Meteor Developer และ package-name คือชื่อของแพ็คเกจ

C:\Users\username\Desktop\meteorApp\packages>meteor create --package username:package-name

การเพิ่มแพ็คเกจ

เพื่อให้สามารถเพิ่มแพ็กเกจในเครื่องลงในแอพของเราได้เราต้องตั้งค่าไฟล์ ENVIRONMENT VARIABLEซึ่งจะบอกให้ Meteor โหลดแพ็กเกจจากโฟลเดอร์ภายในเครื่อง คลิกขวาที่ไอคอนคอมพิวเตอร์แล้วเลือกproperties/Advanced system settings/Environment Variables/NEW.

Variable Name ควรจะเป็น PACKAGE_DIRS. Variable Valueควรเป็นเส้นทางไปยังโฟลเดอร์ที่เราสร้างขึ้น ในกรณีของเราC:\Users\username\Desktop\meteorApp\packages.

อย่าลืมรีสตาร์ทไฟล์ command prompt หลังจากเพิ่มตัวแปรสภาพแวดล้อมใหม่

ตอนนี้เราสามารถเพิ่มแพ็คเกจลงในแอพของเราได้แล้วโดยเรียกใช้โค้ดต่อไปนี้ -

C:\Users\username\Desktop\meteorApp>meteor add username:package-name

ไฟล์แพ็คเกจ

ไฟล์สี่ไฟล์ต่อไปนี้จะอยู่ในแพ็คเกจที่เราสร้างขึ้น

  • package-name-test.js
  • package-name.js
  • package.js
  • README.md

แพ็คเกจการทดสอบ (package-name-test.js)

ข้อเสนอของ Meteor tinytestแพ็คเกจสำหรับการทดสอบ มาติดตั้งกันก่อนโดยใช้คำสั่งต่อไปนี้ในหน้าต่างพรอมต์คำสั่ง

C:\Users\username\Desktop\meteorApp>meteor add tinytest

ถ้าเราเปิด package-name-test.jsเราจะเห็นตัวอย่างการทดสอบเริ่มต้น เราจะใช้ตัวอย่างนี้เพื่อทดสอบแอป หมายเหตุ: การเขียนการทดสอบของเราเองจะดีกว่าเสมอเมื่อพัฒนาแพ็คเกจดาวตก

ในการทดสอบแพ็คเกจให้เรารันโค้ดนี้ในพรอมต์คำสั่ง

C:\Users\username\Desktop>meteor test-packages packages/package-name

เราจะได้ผลลัพธ์ดังต่อไปนี้

ไฟล์ package.js

นี่คือไฟล์ที่เราสามารถเขียนโค้ดได้ มาสร้างฟังก์ชันง่ายๆสำหรับแพ็คเกจของเรากัน แพ็คเกจของเราจะบันทึกข้อความบางส่วนในคอนโซล

package / package.js

myPackageFunction = function() {
   console.log('This is simple package...');
}

ไฟล์ package-name.js

นี่คือไฟล์ที่เราสามารถกำหนดค่าแพ็คเกจบางอย่างได้ เราจะติดต่อกลับในภายหลัง แต่ตอนนี้เราจำเป็นต้องส่งออกmyPackageFunctionเพื่อให้เราสามารถใช้งานได้ในแอปของเรา เราจำเป็นต้องเพิ่มสิ่งนี้เข้าไปข้างในPackage.onUseฟังก์ชัน ไฟล์จะมีลักษณะดังนี้

package / package-name.js

Package.describe({
   name: 'username:package-name',
   version: '0.0.1',
   
   // Brief, one-line summary of the package.
   summary: '',
   
   // URL to the Git repository containing the source code for this package.
   git: '',
   
   // By default, Meteor will default to using README.md for documentation.
   
   // To avoid submitting documentation, set this field to null.
   documentation: 'README.md'
});

Package.onUse(function(api) {
   api.versionsFrom('1.2.1');
   api.use('ecmascript');
   api.addFiles('mypackage.js');
   api.export('myPackageFunction'); // We are exporting the function we created above...
});

Package.onTest(function(api) {
   api.use('ecmascript');
   api.use('tinytest');
   api.use('username:package-name');
   api.addFiles('package-name-tests.js');
});

การใช้แพ็คเกจ

ในที่สุดเราก็สามารถเรียกไฟล์ myPackageFunction() จาก meteorApp.js ไฟล์.

package / package.js

if(Meteor.isClient) {
   myPackageFunction();
}

คอนโซลจะบันทึกข้อความจากแพ็คเกจของเรา

เพื่อทำความเข้าใจให้ดีขึ้นว่าไฟล์ package.js สามารถกำหนดค่าไฟล์ได้เราจะใช้ตัวอย่างจากเอกสารอย่างเป็นทางการของ Meteor

นี่คือไฟล์ตัวอย่าง ...

/* Information about this package */
Package.describe({
   
   // Short two-sentence summary.
   summary: "What this does",

   // Version number.
   version: "1.0.0",

   // Optional.  Default is package directory name.
   name: "username:package-name",

   // Optional github URL to your source repository.
   git: "https://github.com/something/something.git",
});

/* This defines your actual package */
Package.onUse(function (api) {

   // If no version is specified for an 'api.use' dependency, use the
   // one defined in Meteor 0.9.0.
   api.versionsFrom('0.9.0');

   // Use Underscore package, but only on the server.
   // Version not specified, so it will be as of Meteor 0.9.0.
   api.use('underscore', 'server');

   // Use iron:router package, version 1.0.0 or newer.
   api.use('iron:[email protected]');

   // Give users of this package access to the Templating package.
   api.imply('templating')

   // Export the object 'Email' to packages or apps that use this package.
   api.export('Email', 'server');

   // Specify the source code for the package.
   api.addFiles('email.js', 'server');
});

/* This defines the tests for the package */
Package.onTest(function (api) {

   // Sets up a dependency on this package
   api.use('username:package-name');

   // Allows you to use the 'tinytest' framework
   api.use('[email protected]');

   // Specify the source code for the package tests
   api.addFiles('email_tests.js', 'server');
});

/* This lets you use npm packages in your package*/
Npm.depends({
   simplesmtp: "0.3.10",
   "stream-buffers": "0.2.5"
});

ตามที่กล่าวไว้แล้วในบทคอลเลกชันข้อมูลทั้งหมดของเรามีอยู่ในฝั่งไคลเอ็นต์ นี่เป็นปัญหาด้านความปลอดภัยที่สามารถจัดการได้ด้วยวิธีการเผยแพร่และสมัครสมาชิก

กำลังลบการเผยแพร่อัตโนมัติ

ในตัวอย่างนี้เราจะใช้ PlayersCollectionรวบรวมข้อมูลต่อไปนี้ เราเตรียมคอลเลกชันนี้มาก่อนเพื่อให้สามารถมีสมาธิกับบทนั้น ๆ หากคุณไม่แน่ใจว่าจะสร้างคอลเลกชัน MongoDB ในแอพ Meteor ได้อย่างไรให้ตรวจสอบบทคอลเลกชันของเรา

เพื่อรักษาความปลอดภัยข้อมูลของเราเราจำเป็นต้องลบ autopublish แพ็คเกจที่อนุญาตให้เราใช้ข้อมูลในฝั่งไคลเอ็นต์

C:\Users\username\Desktop\meteorApp>meteor remove autopublish

หลังจากขั้นตอนนี้เราจะไม่สามารถรับข้อมูลฐานข้อมูลจากฝั่งไคลเอ็นต์ได้ เราจะสามารถเห็นได้จากฝั่งเซิร์ฟเวอร์ในหน้าต่างพรอมต์คำสั่งเท่านั้น ชำระเงินรหัสต่อไปนี้ -

eorApp.js

var PlayersCollection = new Mongo.Collection('playersCollection');
var myLog = PlayersCollection.find().fetch();
console.log(myLog);

command prompt หน้าต่างจะแสดงคอลเล็กชันทั้งหมดพร้อมวัตถุสี่ชิ้นในขณะที่ไฟล์ developers consoleจะแสดงอาร์เรย์ว่าง ตอนนี้แอปของเราปลอดภัยมากขึ้น

ใช้เผยแพร่และสมัครสมาชิก

สมมติว่าเราต้องการอนุญาตให้ลูกค้าใช้ข้อมูลของเรา สำหรับสิ่งนี้เราต้องสร้างMeteor.publish()วิธีการบนเซิร์ฟเวอร์ วิธีนี้จะส่งข้อมูลไปยังไคลเอนต์

เพื่อให้สามารถรับและใช้ข้อมูลนั้นในฝั่งไคลเอ็นต์เราจะสร้าง Meteor.subscribe()วิธี. ในตอนท้ายของตัวอย่างเรากำลังค้นหาฐานข้อมูล รหัสนี้กำลังทำงานทั้งบนไคลเอนต์และฝั่งเซิร์ฟเวอร์

var PlayersCollection = new Mongo.Collection('playersCollection');

if(Meteor.isServer) {

   Meteor.publish('allowedData', function() {
      return PlayersCollection.find();
   })
}

if (Meteor.isClient) {
   Meteor.subscribe('allowedData');
};

Meteor.setTimeout(function() {
   var myLog = PlayersCollection.find().fetch();
   console.log(myLog);
}, 1000);

เราจะเห็นว่าข้อมูลของเราถูกบันทึกทั้งในไฟล์ developers console และ command prompt หน้าต่าง.

การกรองข้อมูลลูกค้า

นอกจากนี้เรายังสามารถเผยแพร่ข้อมูลบางส่วน ในตัวอย่างนี้เรากำลังเผยแพร่ข้อมูลด้วยname = "John".

var PlayersCollection = new Mongo.Collection('playersCollection');

if(Meteor.isServer) {

   Meteor.publish('allowedData', function() {
      return PlayersCollection.find({name: "John"});
   })
}

if (Meteor.isClient) {
   Meteor.subscribe('allowedData');
};

Meteor.setTimeout(function() {
   myLog = PlayersCollection.find().fetch();
   console.log(myLog);
}, 1000);

เมื่อเราเรียกใช้รหัสนี้ไฟล์ command prompt จะบันทึกข้อมูลทั้งหมดในขณะที่ฝั่งไคลเอ็นต์ console จะบันทึกวัตถุสองชิ้นที่มีชื่อ John.

Meteor มีโฟลเดอร์พิเศษที่สามารถช่วยนักพัฒนาในการจัดโครงสร้างแอพ

ลูกค้า

หากคุณสร้างไฟล์ clientทุกอย่างภายในโฟลเดอร์นี้จะถูกเรียกใช้ในฝั่งไคลเอ็นต์ นี่คือโฟลเดอร์ที่คุณสามารถวางไฟล์HTML, CSSและฝั่งไคลเอ็นต์ JavaScript. คุณควรวางMeteor.subscribe ฟังก์ชั่น, templates, helpersและ eventsภายในโฟลเดอร์นี้ หมายเหตุคุณไม่จำเป็นต้องเรียกใช้ไฟล์Meteor.isClient ฟังก์ชันในไฟล์ที่อยู่ภายในไฟล์ client โฟลเดอร์

เซิร์ฟเวอร์

ไฟล์จากโฟลเดอร์นี้จะทำงานบนไฟล์ server side. นี่คือสถานที่ที่methods, Meteor.Publish()ควรเก็บฟังก์ชันและข้อมูลที่ละเอียดอ่อนอื่น ๆ ข้อมูลการรับรองความถูกต้องทั้งหมดควรเก็บไว้ที่นี่ คุณไม่จำเป็นต้องใช้Meteor.isServer() สำหรับไฟล์ภายในโฟลเดอร์นี้

สาธารณะ

นี่คือสถานที่ที่คุณควรวางรูปภาพ Favicons และข้อมูลอื่น ๆ ทั้งหมดที่ให้บริการแก่ลูกค้า

เอกชน

ไฟล์จากโฟลเดอร์นี้สามารถเข้าถึงได้จากเซิร์ฟเวอร์เท่านั้น พวกเขาจะถูกซ่อนจากไคลเอนต์ คุณสามารถใส่JSON หรือ EJSON ไฟล์ที่มีเพียงเซิร์ฟเวอร์เท่านั้นที่จะใช้ภายในโฟลเดอร์นี้

ไคลเอนต์ / ความเข้ากันได้

ไลบรารี JavaScript บางตัวส่งออกตัวแปรเป็น globals ใช้โฟลเดอร์นี้สำหรับไฟล์ที่ต้องดำเนินการโดยไม่ถูกรวมไว้ในขอบเขตตัวแปรใหม่

ส่วนที่เหลือ

โฟลเดอร์ที่เหลือสามารถจัดโครงสร้างได้ตามที่คุณต้องการ รหัสที่วางไว้นอกโฟลเดอร์ที่กล่าวถึงข้างต้นจะถูกเรียกใช้ในไฟล์client และ serverด้านข้าง นี่เป็นสถานที่ที่ดีที่คุณสามารถกำหนดโมเดลของคุณได้

โหลดคำสั่งซื้อ

ควรทราบลำดับการโหลดของไฟล์อยู่เสมอ รายการต่อไปนี้นำมาจากเอกสารทางการของ Meteor

  • ไฟล์เทมเพลต HTML จะโหลดก่อนอย่างอื่นเสมอ

  • ไฟล์ที่ขึ้นต้นด้วย main. ถูกโหลดล่าสุด

  • ไฟล์ภายในไฟล์ lib/ จะโหลดไดเร็กทอรีถัดไป

  • ไฟล์ที่มีพา ธ ลึกกว่าจะโหลดถัดไป

  • จากนั้นไฟล์จะถูกโหลดตามลำดับตัวอักษรของเส้นทางทั้งหมด

หนึ่งในสิ่งที่ยอดเยี่ยมเกี่ยวกับ Meteor คือการปรับใช้แอปนั้นง่ายเพียงใด เมื่อแอปของคุณเสร็จสมบูรณ์มีวิธีง่ายๆในการแบ่งปันกับคนทั้งโลก สิ่งที่คุณต้องทำคือรันโค้ดต่อไปนี้ในหน้าต่างพรอมต์คำสั่ง

C:\Users\username\Desktop\meteorApp>meteor deploy my-first-app-ever.meteor.com

คุณจะถูกขอให้เข้าสู่บัญชีนักพัฒนา Meteor username และ password.

ตอนนี้คุณจะสามารถเข้าถึงแอพจากเบราว์เซอร์ที่ลิงค์ต่อไปนี้ซึ่งมีชื่อแอพของคุณ

http://my-first-app-ever.meteor.com/

ในบทนี้เราจะเรียนรู้วิธีเรียกใช้แอปบนอุปกรณ์ Android Meteor เพิ่งเพิ่มฟังก์ชันนี้สำหรับระบบปฏิบัติการ windows ดังนั้นเราจะต้องอัปเดตแอป Meteor ของเราเป็นเวอร์ชัน 1.3 เบต้า

Note- เมื่อเขียนบทช่วยสอนนี้ Meteor เวอร์ชัน 1.3 อยู่ในเบต้า เราจะอัปเดตเมื่อมีการเผยแพร่เวอร์ชันที่ใช้งานจริง

เนื่องจากเราต้องการใช้ Meteor เวอร์ชันใหม่ล่าสุดเราสามารถอัปเดตได้โดยเรียกใช้รหัสต่อไปนี้ในหน้าต่างพรอมต์คำสั่ง

C:\Users\username\Desktop\meteorApp>meteor update --release 1.3-beta.11

ขั้นตอนที่ 1 - ติดตั้ง Android SDK

ใช้ลิงก์ในตารางต่อไปนี้เพื่อติดตั้ง Android SDK

ซีเนียร์ ซอฟต์แวร์และคำอธิบาย
1

Java Development Kit & Android SDK

คุณจะต้องใช้ Android SDK เพื่อเรียกใช้แอพ Meteor บนสภาพแวดล้อมมือถือ หากคุณยังไม่ได้ติดตั้งคุณสามารถดูบทแนะนำการตั้งค่าสภาพแวดล้อม Androidของเรา

ขั้นตอนที่ 2 - เพิ่มแพลตฟอร์ม Android

ตอนนี้เราต้องเพิ่มแพลตฟอร์ม Android ในโครงการของเรา

C:\Users\username\Desktop\meteorApp>meteor add-platform android

ขั้นตอนที่ 3 - เรียกใช้แอปบน Android Emulator

ในการเรียกใช้แอปบนโปรแกรมจำลอง Android เราจะใช้ไฟล์ –verbose คำสั่งที่ท้ายบรรทัดเพื่อให้สามารถระบุข้อผิดพลาดที่อาจเกิดขึ้นได้ในระหว่างกระบวนการเริ่มต้น

C:\Users\username\Desktop\meteorApp>meteor run android --verbose

เรียกใช้แอปบนอุปกรณ์ Android

เนื่องจากตัวเลียนแบบ Android ทำงานช้าจึงเป็นตัวเลือกที่ดีกว่าในการเรียกใช้แอปบนอุปกรณ์ของคุณโดยตรง คุณสามารถทำได้โดยเชื่อมต่ออุปกรณ์กับคอมพิวเตอร์ของคุณเปิดใช้งานโหมดนักพัฒนาและการดีบัก USB

กระบวนการนี้แตกต่างกันสำหรับอุปกรณ์เฉพาะ คุณต้องค้นหาBuild Number ใน settings/Aboutแล้วแตะเจ็ดครั้ง คุณจะได้รับการแจ้งเตือนว่าคุณเป็นผู้พัฒนาและDeveloper Options จะถูกปลดล็อก

ค้นหาผ่านไฟล์ settings อีกครั้งและเปิดใช้งาน USB debugging.

คุณสามารถเรียกใช้แอพ Meteor บนอุปกรณ์มือถือของคุณโดยใช้คำสั่งต่อไปนี้ในพรอมต์คำสั่ง

C:\Users\username\Desktop\meteorApp>meteor run android-device

ในบทนี้เราจะเรียนรู้วิธีสร้างแอปสิ่งที่ต้องทำง่ายๆ

ขั้นที่ 1 - สร้างแอป

เปิดพรอมต์คำสั่งและเรียกใช้คำสั่งต่อไปนี้ -

C:\Users\username\Desktop>meteor create todo-app

หากต้องการดูแอปคุณต้องเรียกใช้แอปด้วยไฟล์ meteor คำสั่งและไปที่ http://localhost:3000

C:\Users\username\Desktop\todo-app>meteor

ขั้นที่ 2 - สร้างโฟลเดอร์และไฟล์

แทนที่จะเป็นโครงสร้างไฟล์เริ่มต้นเราจะปรับโครงสร้างใหม่ มาสร้างไฟล์client โฟลเดอร์ที่เราจะสร้าง todo-app.html, todo-app.css และ todo-app.js.

C:\Users\username\Desktop\todo-app>mkdir client
C:\Users\username\Desktop\todo-app\client>touch todo-app.html
C:\Users\username\Desktop\todo-app\client>touch todo-app.js

นอกจากนี้เรายังจะสร้างไฟล์ server โฟลเดอร์ด้วย server.js ภายใน.

C:\Users\username\Desktop\todo-app>mkdir server
C:\Users\username\Desktop\todo-app\server>touch server.js

สุดท้ายมาสร้าง collections โฟลเดอร์ด้วย task-collection.js ไฟล์ภายใน

C:\Users\username\Desktop\todo-app>mkdir server
C:\Users\username\Desktop\todo-app\collections>touch task-collection.js

คุณสามารถดูโครงสร้างแอปได้จากรูปภาพต่อไปนี้ -

ขั้นตอนที่ 3 - ไคลเอนต์ / todo-app.html

ขั้นตอนแรกในการพัฒนาของเราคือการสร้าง HTML สำหรับแอป เราต้องการช่องป้อนข้อมูลที่เราสามารถเพิ่มงานใหม่ได้ งานจะอยู่ในรูปแบบของรายการด้วยdelete และ checkฟังก์ชันการทำงาน นอกจากนี้เรายังมีฟังก์ชันสำหรับแสดงหรือซ่อนงานที่เสร็จสมบูรณ์

<head>
   <title>Todo App</title>
</head>

<body>
   <h1>Todo List ({{incompleteCount}})</h1>

   <label class = "hide-completed">
      <input type = "checkbox" checked = "{{hideCompleted}}" />
      Hide Completed Tasks
   </label>

   <form class = "new-task">
      <input type = "text" name = "text" placeholder = "Add new tasks" />
   </form>

   <ul>
      {{#each tasks}}
         {{> task}}
      {{/each}}
   </ul>
</body>

<template name = "task">
   <li class = "{{#if checked}}checked{{/if}}">
      <button class = "delete">x</button>
      <input type = "checkbox" checked = "{{checked}}" class = "toggle-checked" />
      <span>{{username}} - {{text}}</span>
   </li>
</template>

ขั้นตอนที่ 4 - คอลเลกชัน / งานคอลเลกชัน js

นี่คือสถานที่ที่เราจะสร้าง MongoDB Collection ใหม่เพื่อให้เราสามารถใช้งานได้ทั้งบนเซิร์ฟเวอร์และฝั่งไคลเอ็นต์

Tasks = new Mongo.Collection("tasks");

ขั้นตอนที่ 5 - เซิร์ฟเวอร์ / เซิร์ฟเวอร์ js

เราจะกำหนดวิธีการสำหรับแอปของเราที่ฝั่งเซิร์ฟเวอร์ วิธีการเหล่านี้จะถูกเรียกจากไคลเอนต์ ในไฟล์นี้เราจะเผยแพร่แบบสอบถามฐานข้อมูลด้วย

// Publishing tasks from the server...

Meteor.publish("tasks", function () {
   return Tasks.find({});
});

// Methods for handling MongoDb Tasks collection data...

Meteor.methods({

   addTask: function (text) {

      Tasks.insert({
         text: text,
         createdAt: new Date(),
      });
   },

   deleteTask: function (taskId) {
      var task = Tasks.findOne(taskId);
      Tasks.remove(taskId);
   },

   setChecked: function (taskId, setChecked) {
      var task = Tasks.findOne(taskId);
      Tasks.update(taskId, { $set: { checked: setChecked} });
   }
});

ขั้นตอนที่ 6 - client / todo-app.js

นี่คือไฟล์ JavaScript ของไคลเอ็นต์หลัก ไฟล์นี้สามารถ refactored ได้ แต่เราจะเขียนโค้ดฝั่งไคลเอ็นต์ทั้งหมดที่นี่ ขั้นแรกเราสมัครเป็นสมาชิกไฟล์taskคอลเลกชันที่เผยแพร่บนเซิร์ฟเวอร์ จากนั้นเราสร้างhelpers เพื่อให้สามารถจัดการกับตรรกะของแอปได้และสุดท้ายเรากำหนดไฟล์ events ที่จะเรียกใช้เมธอดจากเซิร์ฟเวอร์

// Subscribing to the published tasks
Meteor.subscribe("tasks");

// Show/Hide functionality
Template.body.helpers({

   tasks: function () {

      if (Session.get("hideCompleted")) {

         // If hide completed is checked, filter tasks
         return Tasks.find({checked: {$ne: true}}, {sort: {createdAt: -1}}); } else { // Otherwise, return all of the tasks return Tasks.find({}, {sort: {createdAt: -1}}); } }, hideCompleted: function () { return Session.get("hideCompleted"); }, incompleteCount: function () { return Tasks.find({checked: {$ne: true}}).count();
   }
});

// Events for creating new tasks and Show/Hide functionality.
// Calling methods from the server

Template.body.events({

   "submit .new-task": function (event) {
      event.preventDefault();
      var text = event.target.text.value;

      Meteor.call("addTask", text);
      event.target.text.value = "";
   },

   "change .hide-completed input": function (event) {
      Session.set("hideCompleted", event.target.checked);
   }
});

// Events for Deleting and Check/Uncheck functionality
Template.task.events({
   
   "click .toggle-checked": function () {

      // Set the checked property to the opposite of its current value
      Meteor.call("setChecked", this._id, ! this.checked);
   },

   "click .delete": function () {
      Meteor.call("deleteTask", this._id);
   }
});

ขั้นตอนที่ 7 - ปรับใช้

หลังจากที่เราพัฒนาเสร็จแล้วเราสามารถปรับใช้แอพได้จากหน้าต่างพรอมต์คำสั่ง ชื่อการปรับใช้ของแอปของเราจะเป็นmy-first-todo-app.

C:\Users\username\Desktop\todo-app>meteor deploy my-first-todo-app

เราสามารถเปิดไฟล์ http://my-first-todo-app.meteor.com/ เพื่อเริ่มใช้แอพของเรา

เราได้กล่าวถึงแนวทางปฏิบัติที่ดีที่สุดบางประการของการพัฒนา Meteor ในบทก่อนหน้านี้แล้ว ต่อไปนี้เป็นแนวทางปฏิบัติที่ดีที่สุดบางส่วนที่ควรคำนึงถึงขณะใช้ Meteor

โครงสร้างไดเรกทอรี

ไม่มีกฎที่เข้มงวดเกี่ยวกับโครงสร้างไดเรกทอรีในแอป Meteor สำหรับข้อมูลเพิ่มเติมเกี่ยวกับแนวทางโปรดดูบทMeteor - Structure

ใช้วิธีการ

คุณควรใช้Meteor - Methodsเสมอเมื่อทำงานกับข้อมูลที่ละเอียดอ่อนแทนการโทรinsert, updateและ remove โดยตรงจากลูกค้า

การจัดการข้อมูล

ปกป้องข้อมูลของคุณโดยใช้เผยแพร่และสมัครสมาชิกวิธีการ หากคุณต้องการให้ข้อมูลของคุณพร้อมใช้งานสำหรับลูกค้าทั้งหมดคุณสามารถใช้nullเป็นชื่อสิ่งพิมพ์แทน การเผยแพร่ข้อมูลขนาดเล็กจะช่วยปรับปรุงประสิทธิภาพของแอปด้วย

ตรวจสอบข้อมูล

คุณควรตรวจสอบความถูกต้องของข้อมูลทั้งหมดที่จะเก็บไว้ในคอลเลกชัน หนึ่งในตัวเลือกที่ดีที่สุดคือแพ็คเกจcollection2 แพคเกจนี้ทำให้ง่ายต่อการตั้งค่าการตรวจสอบความถูกต้องของเซิร์ฟเวอร์และฝั่งไคลเอ็นต์

ลดเซสชัน

session ตัวแปรเป็นตัวแปรส่วนกลางและการใช้ globals ขัดต่อแนวทางปฏิบัติที่ดีที่สุดของ JavaScript

เราเตอร์

มีสองตัวเลือกยอดนิยมสำหรับการกำหนดเส้นทาง Meteor สำหรับปพลิเคชันที่มีขนาดเล็กมีเหล็ก Router จะรันใหม่โดยอัตโนมัติเมื่อข้อมูลมีการเปลี่ยนแปลง สำหรับแอปขนาดใหญ่มีการไหลของ Router เราเตอร์นี้ช่วยให้คุณมีอิสระมากขึ้นในการเพิ่มประสิทธิภาพการเรนเดอร์เทมเพลตโดยเสียค่าใช้จ่ายโค้ดสำเร็จรูปเพิ่มขึ้นเล็กน้อย

แพ็คเกจ

ตรวจสอบเสมอว่ามีการอัปเดตแพ็กเกจเป็นประจำหรือไม่ก่อนที่คุณจะเลือกใช้ภายในแอปของคุณ