Mongodb phản ứng

Trước hết, chúng tôi không thể kết nối React JS với MongoDB vì mọi thứ không hoạt động như thế này. Đầu tiên, chúng tôi tạo một ứng dụng phản ứng, sau đó để bảo trì phụ trợ, chúng tôi tạo API trong nút. js và thể hiện. js đang chạy ở một cổng khác và ứng dụng phản ứng của chúng tôi đang chạy ở một cổng khác. để kết nối React với cơ sở dữ liệu (MongoDB), chúng tôi tích hợp thông qua API. Bây giờ hãy xem cách chúng tôi tạo một ứng dụng React đơn giản lấy tên và email đầu vào từ người dùng và lưu nó vào cơ sở dữ liệu

Điều kiện tiên quyết

  • NodeJS được cài đặt trong hệ thống của bạn (cài đặt)
  • MongoDB được cài đặt trong hệ thống của bạn (cài đặt)

Tập tin và thư mục Setum. Thiết lập từng tệp và thư mục cần thiết cho giao diện người dùng và phụ trợ từng cái một

  • Tạo ứng dụng phản ứng. Để xây dựng một ứng dụng phản ứng, hãy làm theo các bước dưới đây

Bước 1. Tạo một ứng dụng phản ứng bằng lệnh sau

npx create-react-app foldername

Bước 2. Sau khi hoàn tất, hãy thay đổi thư mục của bạn thành thư mục mới được tạo có tên là phụ trợ bằng lệnh sau

✅ Hoàn tất khóa học, bạn sẽ có dự án hoàn chỉnh thực tế với chủ đề website thương mại điện tử, website tin tức,…

✅ Hoàn tất khóa học, bạn sẽ có đủ khả năng ứng tuyển vào các công ty thiết lập web fullstack với MongoDB, Express. js, phản ứng. js và Node. js

Giới Thiệu Khóa Học

ReactJS là một trong những thư viện được sử dụng phổ biến hiện nay với các ứng dụng đang được sử dụng như. Facebook, Instagram, Twitter, Netflix, WhatsApp,…

NodeJS đang là nền tảng được các thành viên lập trình lựa chọn thay thế cho các nền tảng back-end với PHP, Java,…

Expressjs là một khung được xây dựng trên nền tảng của Nodejs. Nó cung cấp các tính năng mạnh mẽ để phát triển web hoặc di động. Expressjs hỗ trợ các phương thức HTTP và phần mềm trung gian tạo ra API vô cùng mạnh mẽ và dễ sử dụng

MongoDB là một hệ thống quản trị cơ sở dữ liệu NoSQL mã nguồn mở đa nền tảng viết bằng C++. Bản ghi trong MongoDB được lưu trữ dưới dạng một văn bản dữ liệu, là một cấu trúc dữ liệu bao gồm các cặp giá trị và trường tương tự như các đối tượng JSON

Việc xây dựng các ứng dụng fullstack (tức là giao diện người dùng + phụ trợ) với MERN stack rất phổ biến – trong khóa học này, bạn sẽ học nó từ đầu với ví dụ về một dự án hoàn chỉnh

MERN là viết tắt của MongoDB, Express. js, phản ứng. js và Node. js – khi kết hợp lại, bốn công nghệ này cho phép bạn xây dựng các ứng dụng web tuyệt vời

Trong những năm gần đây, bốn công nghệ này đã vươn lên trở thành một trong những công nghệ được sử dụng rộng rãi nhất

Nếu bạn bắt đầu dự án với react-starter-kit [ứng dụng web đẳng cấu] thì có thể bạn sẽ cần cách kết nối với cơ sở dữ liệu MongoDb

api/người dùng. js

import { Router } from 'express';
import { ObjectID } from 'mongodb';

const router = new Router();

router.get('/:id', async (req, res, next) => {
  try {
    const db = req.app.locals.db;
    const user = await db.collection('user').findOne({ _id: new ObjectID(req.params.id) }, {
      email: 1,
      firstName: 1,
      lastName: 1
    });

    if (user) {
      user.id = req.params.id;
      res.send(user);
    } else {
      res.sendStatus(404);
    }
  } catch (err) {
    next(err);
  }
});

export default router;

/config. js

export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};

người phục vụ. js

import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});

Nếu có vấn đề gì chưa hiểu, vui lòng comment lại, mình sẽ giải đáp nhé

Nguồn. Vừa phải

Nhân Nguyễn

Kỹ sư công nghệ thông tin đang làm việc tại Tokyo, Nhật Bản. Đam mê lập trình web và mobile, yêu thích ứng dụng tối ưu tốc độ cũng như cải thiện quy trình làm việc để phát triển sản phẩm chất lượng

Bạn có thể sử dụng Realm JavaScript SDK và thư viện Realm React chính thức để xây dựng ứng dụng di động với React Native. Hướng dẫn này hướng dẫn bạn cách xây dựng ứng dụng của riêng bạn sử dụng Đồng bộ hóa linh hoạt

Đối với hướng dẫn này, chúng ta sẽ bắt đầu với một ứng dụng mẫu dựng sẵn để xem mọi thứ khớp với nhau như thế nào. Sau đó, bạn sẽ thêm trường Ưu tiên mới vào mô hình Mục hiện có và cập nhật Đăng ký đồng bộ hóa linh hoạt để chỉ hiển thị các mục trong phạm vi ưu tiên

Hướng dẫn này sẽ mất khoảng 30 phút

Ghi chú

Kiểm tra Bắt đầu nhanh

Nếu bạn thích tự mình khám phá hơn là làm theo hướng dẫn có hướng dẫn, hãy xem

Bắt đầu nhanh React Native . Nó bao gồm các ví dụ mã có thể sao chép và thông tin cần thiết mà bạn cần để thiết lập ứng dụng React Native với Atlas Device Sync.

điều kiện tiên quyết

  • Bạn phải thiết lập môi trường cục bộ để phát triển React Native trước khi có thể bắt đầu hướng dẫn này. Để biết hướng dẫn chi tiết, hãy xem Thiết lập môi trường phát triển trong tài liệu React Native.

  • Hướng dẫn này bắt đầu với Ứng dụng mẫu. Bạn cần có Tài khoản Atlas , khóa API và

    npx pod-install
    1 để tạo Ứng dụng mẫu
    • Bạn có thể tìm hiểu thêm về cách tạo tài khoản Atlas trong tài liệu Bắt đầu Atlas . Đối với hướng dẫn này, bạn cần có tài khoản Atlas với cụm cấp miễn phí.

    • Bạn cũng cần có khóa API Atlas cho tài khoản MongoDB Cloud mà bạn muốn đăng nhập bằng. Bạn phải là Chủ dự án để tạo Ứng dụng mẫu bằng cách sử dụng

      npx pod-install
      1.

    • Để tìm hiểu thêm về cách cài đặt

      npx pod-install
      1, hãy xem

      Cài đặt lĩnh vực-cli. Sau khi bạn đã cài đặt
      npx pod-install
      1, hãy đăng nhập bằng khóa API cho dự án Atlas của bạn

Bắt đầu với Ứng dụng mẫu

Để bắt đầu, bạn sẽ tạo một ứng dụng mới trên máy tính của mình và làm quen với nó. Ứng dụng sẽ sử dụng mẫu dựng sẵn bao gồm ứng dụng React Native đang hoạt động và các tệp cấu hình Ứng dụng Atlas tương ứng

Ứng dụng mẫu là ứng dụng "danh sách việc cần làm" cơ bản. Người dùng có thể nhập danh sách các công việc cần làm và sau đó đánh dấu từng việc cần làm khi hoàn thành. Một số chức năng cơ bản đã được thiết lập cho bạn

  • Người dùng có thể tạo tài khoản email/mật khẩu và đăng nhập, thoát khỏi ứng dụng

  • Người dùng có thể tạo, đọc, cập nhật và xóa các đối tượng

    npx pod-install
    5 đại diện cho các mục riêng lẻ để thực hiện

  • Lớp

    npx pod-install
    5 được thiết lập để tự động đồng bộ hóa với Atlas và các ứng dụng khách khác bằng Atlas Device Sync

Sử dụng các bước sau để thiết lập và chạy ứng dụng mẫu trên máy tính của bạn

1

Tạo ứng dụng mẫu

Chạy lệnh sau trong một thiết bị đầu cuối để tạo một thư mục mới với các tệp cấu hình theo khuôn mẫu của bạn và ứng dụng React Native

import { Router } from 'express';
import { ObjectID } from 'mongodb';

const router = new Router();

router.get('/:id', async (req, res, next) => {
  try {
    const db = req.app.locals.db;
    const user = await db.collection('user').findOne({ _id: new ObjectID(req.params.id) }, {
      email: 1,
      firstName: 1,
      lastName: 1
    });

    if (user) {
      user.id = req.params.id;
      res.send(user);
    } else {
      res.sendStatus(404);
    }
  } catch (err) {
    next(err);
  }
});

export default router;
0

Mẹo

Lệnh tạo một thư mục mới trong thư mục hiện tại của bạn có cùng tên với giá trị của cờ

npx pod-install
7

2

Cài đặt phụ thuộc

Trong thiết bị đầu cuối của bạn, hãy chạy các lệnh sau để điều hướng đến ứng dụng gốc phản ứng và cài đặt các phụ thuộc của nó

import { Router } from 'express';
import { ObjectID } from 'mongodb';

const router = new Router();

router.get('/:id', async (req, res, next) => {
  try {
    const db = req.app.locals.db;
    const user = await db.collection('user').findOne({ _id: new ObjectID(req.params.id) }, {
      email: 1,
      firstName: 1,
      lastName: 1
    });

    if (user) {
      user.id = req.params.id;
      res.send(user);
    } else {
      res.sendStatus(404);
    }
  } catch (err) {
    next(err);
  }
});

export default router;
2

Để xây dựng và chạy ứng dụng trên thiết bị iOS hoặc trình mô phỏng, hãy cài đặt các phần phụ thuộc iOS bổ sung với CocoaPods.

npx pod-install

Mẹo

Đảm bảo chuyển về thư mục gốc của dự án giao diện người dùng sau khi bạn cài đặt các nhóm

3

Xây dựng ứng dụng

Tại thời điểm này, bạn nên có một ứng dụng React Native đầy đủ chức năng có thể chạy trên cả iOS và Android

Mẹo

Nếu bạn đang gặp lỗi hoặc gặp sự cố khác, thì đó có thể là sự cố với cách thiết lập môi trường cục bộ của bạn. Hãy xem hướng dẫn thiết lập môi trường phát triển chính thức của React Native và đảm bảo rằng bạn đã làm theo tất cả các bước cho Hệ điều hành phát triển và Hệ điều hành mục tiêu của mình.

4

Kiểm tra ứng dụng

Khi quá trình xây dựng hoàn tất, bạn sẽ có một ứng dụng chức năng chạy trên trình giả lập của mình. Trong ứng dụng, hãy đăng ký tài khoản mới và chơi với ứng dụng trong vài phút

  • Thêm một vài việc cần làm vào danh sách

  • Nhấn hộp kiểm trên một hoặc hai mục để đánh dấu chúng là hoàn thành

  • Nhấn X vào một mục để xóa nó khỏi danh sách

Nếu bạn kết nối với cụm Atlas của mình và truy vấn bộ sưu tập

npx pod-install
8, bạn có thể xem dữ liệu ứng dụng của mình. Dữ liệu mới và các thay đổi từ ứng dụng React Native sẽ tự động đồng bộ hóa với bộ sưu tập này

Mẹo

Để tìm hiểu cách kết nối với cụm Atlas của bạn, hãy xem Kết nối với triển khai cơ sở dữ liệu.

Tương tự, mọi thay đổi trong bộ sưu tập sẽ tự động đồng bộ xuống ứng dụng React Native. Hãy thử thay đổi trạng thái hoàn thành của một mục trong cụm của bạn - ứng dụng React Native sẽ tự động cập nhật giá trị mới bất cứ khi nào có kết nối mạng

import { Router } from 'express';
import { ObjectID } from 'mongodb';

const router = new Router();

router.get('/:id', async (req, res, next) => {
  try {
    const db = req.app.locals.db;
    const user = await db.collection('user').findOne({ _id: new ObjectID(req.params.id) }, {
      email: 1,
      firstName: 1,
      lastName: 1
    });

    if (user) {
      user.id = req.params.id;
      res.send(user);
    } else {
      res.sendStatus(404);
    }
  } catch (err) {
    next(err);
  }
});

export default router;
5

Mẹo

Để tìm hiểu thêm về cách cập nhật dữ liệu trong cụm của bạn, hãy xem Cập nhật tài liệu.

Mongodb phản ứng

Làm quen với ứng dụng mẫu

Bây giờ bạn đã có ứng dụng mẫu đang chạy, hãy đi sâu vào mã để xem những gì chúng tôi đang làm việc với

ứng dụng bản đồ

Ứng dụng mẫu bao gồm Ứng dụng Atlas được định cấu hình đầy đủ trong thư mục

npx pod-install
9. Nó có một giá trị
import { Router } from 'express';
import { ObjectID } from 'mongodb';

const router = new Router();

router.get('/:id', async (req, res, next) => {
  try {
    const db = req.app.locals.db;
    const user = await db.collection('user').findOne({ _id: new ObjectID(req.params.id) }, {
      email: 1,
      firstName: 1,
      lastName: 1
    });

    if (user) {
      user.id = req.params.id;
      res.send(user);
    } else {
      res.sendStatus(404);
    }
  } catch (err) {
    next(err);
  }
});

export default router;
50 duy nhất trong
import { Router } from 'express';
import { ObjectID } from 'mongodb';

const router = new Router();

router.get('/:id', async (req, res, next) => {
  try {
    const db = req.app.locals.db;
    const user = await db.collection('user').findOne({ _id: new ObjectID(req.params.id) }, {
      email: 1,
      firstName: 1,
      lastName: 1
    });

    if (user) {
      user.id = req.params.id;
      res.send(user);
    } else {
      res.sendStatus(404);
    }
  } catch (err) {
    next(err);
  }
});

export default router;
51 mà các ứng dụng khách sử dụng để kết nối

Nó cũng bao gồm các cấu hình được xác định trước sau đây

  • Nguồn dữ liệu được liên kết với Cụm Atlas của bạn

  • Lược đồ cho bộ sưu tập

    npx pod-install
    8 phù hợp với lớp
    npx pod-install
    5 trong ứng dụng React Native

  • Nhà cung cấp xác thực cho phép người dùng đăng ký và đăng nhập vào ứng dụng của bạn bằng email và mật khẩu

  • Cấu hình đồng bộ hóa linh hoạt với một vai trò phiên duy nhất cho phép người dùng chỉ đọc và ghi dữ liệu của chính họ

Phản ứng ứng dụng gốc

Ứng dụng React Native là ứng dụng khách di động được định cấu hình đầy đủ có thể chạy trên thiết bị iOS và Android. Nó nằm trong thư mục

import { Router } from 'express';
import { ObjectID } from 'mongodb';

const router = new Router();

router.get('/:id', async (req, res, next) => {
  try {
    const db = req.app.locals.db;
    const user = await db.collection('user').findOne({ _id: new ObjectID(req.params.id) }, {
      email: 1,
      firstName: 1,
      lastName: 1
    });

    if (user) {
      user.id = req.params.id;
      res.send(user);
    } else {
      res.sendStatus(404);
    }
  } catch (err) {
    next(err);
  }
});

export default router;
54

Ứng dụng sử dụng thư viện @realm/react chính thức. Thư viện bao gồm các móc và thành phần React cho phép bạn kết nối với Ứng dụng Atlas của mình, đọc và ghi dữ liệu cũng như tự động đồng bộ hóa các thay đổi từ các thiết bị khác.

Ứng dụng chứa một số tệp cấu hình và thư mục, nhưng bạn có thể bỏ qua chúng trừ khi bạn muốn tùy chỉnh ứng dụng. Đối với hướng dẫn này, bạn sẽ muốn làm quen với các thành phần React trong thư mục

import { Router } from 'express';
import { ObjectID } from 'mongodb';

const router = new Router();

router.get('/:id', async (req, res, next) => {
  try {
    const db = req.app.locals.db;
    const user = await db.collection('user').findOne({ _id: new ObjectID(req.params.id) }, {
      email: 1,
      firstName: 1,
      lastName: 1
    });

    if (user) {
      user.id = req.params.id;
      res.send(user);
    } else {
      res.sendStatus(404);
    }
  } catch (err) {
    next(err);
  }
});

export default router;
55

Tên tệp

Sự mô tả

import { Router } from 'express';
import { ObjectID } from 'mongodb';

const router = new Router();

router.get('/:id', async (req, res, next) => {
  try {
    const db = req.app.locals.db;
    const user = await db.collection('user').findOne({ _id: new ObjectID(req.params.id) }, {
      email: 1,
      firstName: 1,
      lastName: 1
    });

    if (user) {
      user.id = req.params.id;
      res.send(user);
    } else {
      res.sendStatus(404);
    }
  } catch (err) {
    next(err);
  }
});

export default router;
56

Lớp

npx pod-install
5, bao gồm lược đồ đối tượng của nó. Chúng tôi nhập lớp trong
import { Router } from 'express';
import { ObjectID } from 'mongodb';

const router = new Router();

router.get('/:id', async (req, res, next) => {
  try {
    const db = req.app.locals.db;
    const user = await db.collection('user').findOne({ _id: new ObjectID(req.params.id) }, {
      email: 1,
      firstName: 1,
      lastName: 1
    });

    if (user) {
      user.id = req.params.id;
      res.send(user);
    } else {
      res.sendStatus(404);
    }
  } catch (err) {
    next(err);
  }
});

export default router;
58 để đưa nó vào lược đồ Vương quốc của ứng dụng

import { Router } from 'express';
import { ObjectID } from 'mongodb';

const router = new Router();

router.get('/:id', async (req, res, next) => {
  try {
    const db = req.app.locals.db;
    const user = await db.collection('user').findOne({ _id: new ObjectID(req.params.id) }, {
      email: 1,
      firstName: 1,
      lastName: 1
    });

    if (user) {
      user.id = req.params.id;
      res.send(user);
    } else {
      res.sendStatus(404);
    }
  } catch (err) {
    next(err);
  }
});

export default router;
58

Các móc nối và nhà cung cấp Realm mà chúng tôi tạo và xuất để hoạt động với Realm trong toàn bộ ứng dụng

export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};
70

Thành phần gốc của ứng dụng mà chúng tôi kết hợp với các nhà cung cấp móc nối Realm từ

import { Router } from 'express';
import { ObjectID } from 'mongodb';

const router = new Router();

router.get('/:id', async (req, res, next) => {
  try {
    const db = req.app.locals.db;
    const user = await db.collection('user').findOne({ _id: new ObjectID(req.params.id) }, {
      email: 1,
      firstName: 1,
      lastName: 1
    });

    if (user) {
      user.id = req.params.id;
      res.send(user);
    } else {
      res.sendStatus(404);
    }
  } catch (err) {
    next(err);
  }
});

export default router;
58

export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};
72

Biểu mẫu đăng ký và đăng nhập người dùng mà người dùng nhìn thấy khi họ mở ứng dụng lần đầu tiên

export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};
73

Ứng dụng "danh sách việc cần làm" chính mà người dùng tương tác sau khi họ đăng nhập. Nó truy vấn các đối tượng

npx pod-install
5 từ Realm và hiển thị chúng trong một danh sách. Nó cũng bao gồm mã để tạo các đối tượng
npx pod-install
5 mới và lưu trữ chúng trong Realm

export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};
76

Biểu mẫu giao diện người dùng cho phép chúng tôi nhập dữ liệu cho đối tượng

npx pod-install
5 mới. Mã thực sự tạo ra các đối tượng mới nằm trong
export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};
73

export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};
79

Nút có thể tái sử dụng để đăng xuất người dùng đã được xác thực

Thêm một trường mức độ ưu tiên

Bây giờ bạn đã quen thuộc hơn với những gì đã được cung cấp trong ứng dụng mẫu, hãy viết một số mã để triển khai một tính năng mới

Đối với hướng dẫn này, chúng tôi sẽ thêm thuộc tính "ưu tiên" mới cho từng đối tượng trong số các đối tượng

npx pod-install
5. Điều này sẽ cho phép chúng tôi tổ chức việc cần làm theo mức độ quan trọng của chúng và cho phép chúng tôi chỉ tập trung vào những việc quan trọng nhất

1

Xác định các mức độ ưu tiên

Chúng tôi muốn cho phép một số lượng nhỏ các cấp độ ưu tiên được đặt tên và chúng tôi muốn có thể dễ dàng sắp xếp các cấp độ. Để làm điều này, chúng tôi sẽ sử dụng một hàm trợ giúp để xác định một đối tượng "enum" ánh xạ một tập hợp các tên cấp độ được sắp xếp tới và từ một số nguyên biểu thị mức độ ưu tiên của chúng

Thêm đoạn mã sau trực tiếp dưới báo cáo nhập khẩu trong

import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});
81

ItemSchema. js

export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};
7

Các mức độ ưu tiên trong enum được sắp xếp từ quan trọng nhất đến ít nhất. Giá trị chỉ số tương ứng cho mỗi cấp độ tăng từ quan trọng nhất,

import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});
82, đến ít quan trọng nhất,
import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});
83. Điều này có nghĩa là mức độ ưu tiên "cao hơn" (i. e. quan trọng hơn) có giá trị chỉ mục thấp hơn

Mẹo

Trong ứng dụng TypeScript, bạn có thể xác định enum để lập mô hình này thay vì sử dụng hàm trợ giúp.

import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});
8

2

Cập nhật Mô hình dữ liệu mục việc cần làm

Bây giờ chúng ta có một

import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});
84 xác định các giá trị có thể có của trường
import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});
85. Tuy nhiên chúng ta vẫn phải định nghĩa trường
import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});
85 trong lớp
npx pod-install
5

Thêm các dòng sau vào mã của bạn trong

import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});
81 để thêm
import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});
85 vào mô hình

ItemSchema. js

npx pod-install
9

Ghi chú

Tại sao điều này không phá vỡ đồng bộ hóa

Tại thời điểm này, mô hình React Native

npx pod-install
5 và lược đồ tương ứng của nó trong Ứng dụng Atlas của bạn không còn phù hợp nữa. Không sao đâu

Việc thêm một thuộc tính vào một đối tượng Realm không phải là một thay đổi vi phạm và do đó không yêu cầu thiết lập lại máy khách. Ứng dụng mẫu đã bật Chế độ phát triển, vì vậy các thay đổi đối với đối tượng Realm của máy khách được phản ánh trong lược đồ phía máy chủ. Để biết thêm thông tin, hãy xem Chế độ phát triển và Cập nhật mô hình dữ liệu của bạn

3

Thêm Bộ chọn Ưu tiên

Mô hình dữ liệu của ứng dụng của bạn hiện bao gồm một

import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});
85 cho mỗi đối tượng
npx pod-install
5. Hãy cập nhật giao diện người dùng ứng dụng để bạn có thể chọn giá trị ưu tiên khi thêm việc cần làm mới vào danh sách

Trước tiên, chúng tôi sẽ cài đặt một thư viện bên ngoài để triển khai thành phần bộ chọn ưu tiên. Chạy phần sau trong thiết bị đầu cuối của bạn bên trong gốc dự án của bạn

npx pod-install
3

Nếu bạn đang xây dựng cho iOS, hãy đảm bảo liên kết các Cocoapod được liên kết sau khi bạn đã cài đặt gói

npx pod-install

Mẹo

Bạn có thể cần xây dựng lại ứng dụng của mình sau khi cài đặt. Để làm như vậy, hãy dừng trình đóng gói cho dự án của bạn và sau đó chạy lệnh xây dựng

Bây giờ gói đã được cài đặt đầy đủ, hãy cập nhật thành phần lời nhắc tạo việc cần làm mới để sử dụng bộ chọn

Thêm các mục nhập sau vào đầu

npx pod-install
93

TạoToDoPrompt. js

npx pod-install
6

Sau đó, sửa đổi thành phần

npx pod-install
94

  • theo dõi

    import express from 'express';
    import Promise from 'bluebird';
    import logger from 'winston';
    import { MongoClient } from 'mongodb';
    import config from './config';
    
    const PORT = process.env.PORT || 3000;
    const server = express();
    
    server.use('/api/users', require('./api/users'));
    
    server.get('/', (req, res) => {
      res.send('Hello World');
    });
    
    MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
      if (err) {
        logger.warn(`Failed to connect to the database. ${err.stack}`);
      }
      server.locals.db = db;
      server.listen(PORT, () => {
        const { address, port }  = server.address();
        logger.info(`Node.js server is listening at http://${address}:${port}`);
      });
    });
    
    85 trong một hook trạng thái

  • kết nối trạng thái với thành phần

    npx pod-install
    96 mà bạn đã nhập

  • chuyển

    import express from 'express';
    import Promise from 'bluebird';
    import logger from 'winston';
    import { MongoClient } from 'mongodb';
    import config from './config';
    
    const PORT = process.env.PORT || 3000;
    const server = express();
    
    server.use('/api/users', require('./api/users'));
    
    server.get('/', (req, res) => {
      res.send('Hello World');
    });
    
    MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
      if (err) {
        logger.warn(`Failed to connect to the database. ${err.stack}`);
      }
      server.locals.db = db;
      server.listen(PORT, () => {
        const { address, port }  = server.address();
        logger.info(`Node.js server is listening at http://${address}:${port}`);
      });
    });
    
    85 cho trình xử lý
    npx pod-install
    98

src/CreateToDoPrompt. js

import { Router } from 'express';
import { ObjectID } from 'mongodb';

const router = new Router();

router.get('/:id', async (req, res, next) => {
  try {
    const db = req.app.locals.db;
    const user = await db.collection('user').findOne({ _id: new ObjectID(req.params.id) }, {
      email: 1,
      firstName: 1,
      lastName: 1
    });

    if (user) {
      user.id = req.params.id;
      res.send(user);
    } else {
      res.sendStatus(404);
    }
  } catch (err) {
    next(err);
  }
});

export default router;
20

Trong

npx pod-install
99, sửa đổi chức năng
npx pod-install
30 để chấp nhận và sử dụng
import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});
85

ItemListView. js

import { Router } from 'express';
import { ObjectID } from 'mongodb';

const router = new Router();

router.get('/:id', async (req, res, next) => {
  try {
    const db = req.app.locals.db;
    const user = await db.collection('user').findOne({ _id: new ObjectID(req.params.id) }, {
      email: 1,
      firstName: 1,
      lastName: 1
    });

    if (user) {
      user.id = req.params.id;
      res.send(user);
    } else {
      res.sendStatus(404);
    }
  } catch (err) {
    next(err);
  }
});

export default router;
21

Sau đó, sửa đổi trình xử lý gửi việc cần làm mới để chấp nhận cấp độ

import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});
85 và chuyển cấp độ đó cho
npx pod-install
30

ItemListView. js

import { Router } from 'express';
import { ObjectID } from 'mongodb';

const router = new Router();

router.get('/:id', async (req, res, next) => {
  try {
    const db = req.app.locals.db;
    const user = await db.collection('user').findOne({ _id: new ObjectID(req.params.id) }, {
      email: 1,
      firstName: 1,
      lastName: 1
    });

    if (user) {
      user.id = req.params.id;
      res.send(user);
    } else {
      res.sendStatus(404);
    }
  } catch (err) {
    next(err);
  }
});

export default router;
22

Cuối cùng, sửa đổi từng mục danh sách việc cần làm để bao gồm

import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});
85 của nó trước
npx pod-install
35

ItemListView. js

import { Router } from 'express';
import { ObjectID } from 'mongodb';

const router = new Router();

router.get('/:id', async (req, res, next) => {
  try {
    const db = req.app.locals.db;
    const user = await db.collection('user').findOne({ _id: new ObjectID(req.params.id) }, {
      email: 1,
      firstName: 1,
      lastName: 1
    });

    if (user) {
      user.id = req.params.id;
      res.send(user);
    } else {
      res.sendStatus(404);
    }
  } catch (err) {
    next(err);
  }
});

export default router;
23

4

Chạy và kiểm tra ứng dụng

Giờ đây, ứng dụng của bạn sẽ cho phép người dùng đặt mức độ ưu tiên cho từng mục việc cần làm mới

Xây dựng lại ứng dụng và mở nó. Thêm một số mục việc cần làm mới để xác nhận rằng bạn có thể chọn mức độ ưu tiên và danh sách hiển thị mức độ ưu tiên của từng việc cần làm

Mongodb phản ứng

Cập nhật đăng ký đồng bộ hóa

Giao thức Đồng bộ hóa Thiết bị sử dụng một mô hình linh hoạt trong đó mỗi ứng dụng khách đồng bộ hóa sử dụng truy vấn RQL tiêu chuẩn để chọn một tập hợp con dữ liệu ứng dụng rồi đăng ký vào tập hợp con đó. Thao tác này sẽ tự động kéo phiên bản mới nhất của tất cả dữ liệu trong tập hợp con vào thiết bị và đồng bộ hóa các thay đổi đối với dữ liệu giữa các thiết bị

Ví dụ: ứng dụng mẫu bạn đang sử dụng có đăng ký tích hợp sau cho các mục mà người dùng hiện tại sở hữu

ItemListView. js

import { Router } from 'express';
import { ObjectID } from 'mongodb';

const router = new Router();

router.get('/:id', async (req, res, next) => {
  try {
    const db = req.app.locals.db;
    const user = await db.collection('user').findOne({ _id: new ObjectID(req.params.id) }, {
      email: 1,
      firstName: 1,
      lastName: 1
    });

    if (user) {
      user.id = req.params.id;
      res.send(user);
    } else {
      res.sendStatus(404);
    }
  } catch (err) {
    next(err);
  }
});

export default router;
24

Bạn có thể nhanh chóng tùy chỉnh đăng ký để chỉ đồng bộ hóa dữ liệu mà ứng dụng của bạn cần. Hãy thêm một tính năng để chứng minh làm thế nào

Đối với hướng dẫn này, chúng tôi sẽ thêm một nút cho phép chúng tôi chuyển đổi giữa hai "chế độ". một trong đó ứng dụng đồng bộ hóa tất cả các mục việc cần làm và một trong đó ứng dụng chỉ đồng bộ hóa những mục "quan trọng" với

import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});
85 Cao hoặc Nghiêm trọng

1

Thêm Chế độ Chuyển đổi vào giao diện người dùng

Đầu tiên, thêm một móc nối

npx pod-install
37 vào thành phần
npx pod-install
38 để theo dõi chế độ hiện tại

ItemListView. js

import { Router } from 'express';
import { ObjectID } from 'mongodb';

const router = new Router();

router.get('/:id', async (req, res, next) => {
  try {
    const db = req.app.locals.db;
    const user = await db.collection('user').findOne({ _id: new ObjectID(req.params.id) }, {
      email: 1,
      firstName: 1,
      lastName: 1
    });

    if (user) {
      user.id = req.params.id;
      res.send(user);
    } else {
      res.sendStatus(404);
    }
  } catch (err) {
    next(err);
  }
});

export default router;
25

Sau đó, thêm một nút mới chuyển đổi chế độ vào cuối danh sách việc cần làm

ItemListView. js

import { Router } from 'express';
import { ObjectID } from 'mongodb';

const router = new Router();

router.get('/:id', async (req, res, next) => {
  try {
    const db = req.app.locals.db;
    const user = await db.collection('user').findOne({ _id: new ObjectID(req.params.id) }, {
      email: 1,
      firstName: 1,
      lastName: 1
    });

    if (user) {
      user.id = req.params.id;
      res.send(user);
    } else {
      res.sendStatus(404);
    }
  } catch (err) {
    next(err);
  }
});

export default router;
26

2

Cập nhật đăng ký đồng bộ hóa

Tại thời điểm này, ứng dụng có thể chuyển đổi chế độ trong giao diện người dùng, nhưng chúng tôi chưa làm gì khác để các chế độ giống hệt nhau về mặt chức năng. Hãy cập nhật đăng ký đồng bộ hóa để chỉ đồng bộ hóa dữ liệu có liên quan đến chế độ hiện tại

Trong

npx pod-install
39 đầu tiên của thành phần
npx pod-install
38, hãy thêm mã kiểm tra chế độ hiện tại và thêm bộ lọc
import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});
85 bổ sung vào truy vấn nếu chế độ "chỉ quan trọng" đang hoạt động

ItemListView. js

import { Router } from 'express';
import { ObjectID } from 'mongodb';

const router = new Router();

router.get('/:id', async (req, res, next) => {
  try {
    const db = req.app.locals.db;
    const user = await db.collection('user').findOne({ _id: new ObjectID(req.params.id) }, {
      email: 1,
      firstName: 1,
      lastName: 1
    });

    if (user) {
      user.id = req.params.id;
      res.send(user);
    } else {
      res.sendStatus(404);
    }
  } catch (err) {
    next(err);
  }
});

export default router;
27

Quan trọng

Đừng quên thêm

npx pod-install
2 vào danh sách phụ thuộc trong đối số thứ hai của
npx pod-install
39

3

Kiểm tra ứng dụng

Ứng dụng của bạn hiện được thiết lập để sửa đổi đăng ký đồng bộ hóa dựa trên chế độ hiện tại. Tuy nhiên, nếu bạn chạy ứng dụng và chuyển sang chế độ "chỉ quan trọng", bạn sẽ thấy rằng danh sách không thay đổi và cảnh báo sẽ xuất hiện trong bảng điều khiển

import { Router } from 'express';
import { ObjectID } from 'mongodb';

const router = new Router();

router.get('/:id', async (req, res, next) => {
  try {
    const db = req.app.locals.db;
    const user = await db.collection('user').findOne({ _id: new ObjectID(req.params.id) }, {
      email: 1,
      firstName: 1,
      lastName: 1
    });

    if (user) {
      user.id = req.params.id;
      res.send(user);
    } else {
      res.sendStatus(404);
    }
  } catch (err) {
    next(err);
  }
});

export default router;
28

Mongodb phản ứng

4

Cập nhật cấu hình đồng bộ hóa

Chúng tôi nhận được cảnh báo vì ứng dụng khách đồng bộ hóa chỉ có thể lọc đăng ký dựa trên một trường nhất định nếu trường đó được liệt kê cụ thể dưới dạng "trường có thể truy vấn" trong cấu hình Đồng bộ hóa thiết bị của Ứng dụng Atlas của bạn

Để mọi thứ hoạt động, chúng tôi cần thêm

import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});
85 làm trường có thể truy vấn trong cấu hình đồng bộ hóa của Ứng dụng Atlas

Đầu tiên, tìm thư mục

npx pod-install
9 của ứng dụng mẫu và sửa đổi
npx pod-install
6

import { Router } from 'express';
import { ObjectID } from 'mongodb';

const router = new Router();

router.get('/:id', async (req, res, next) => {
  try {
    const db = req.app.locals.db;
    const user = await db.collection('user').findOne({ _id: new ObjectID(req.params.id) }, {
      email: 1,
      firstName: 1,
      lastName: 1
    });

    if (user) {
      user.id = req.params.id;
      res.send(user);
    } else {
      res.sendStatus(404);
    }
  } catch (err) {
    next(err);
  }
});

export default router;
29

Sau đó, chạy lệnh đầu cuối sau từ trong thư mục

npx pod-install
9 để triển khai cấu hình đồng bộ hóa đã cập nhật

npx pod-install
0

5

Chạy ứng dụng đã hoàn thành

Khi cấu hình đồng bộ hóa đã cập nhật của bạn được triển khai, ứng dụng của bạn sẽ hoàn tất và có đầy đủ chức năng. Xin chúc mừng

Xây dựng lại và chạy ứng dụng để đảm bảo mọi thứ hoạt động. Bạn sẽ có thể tạo, hoàn thành và xóa các mục việc cần làm cũng như chuyển sang và từ chế độ "chỉ quan trọng"

Mongodb phản ứng

Cái gì tiếp theo?

  • Đọc tài liệu React Native SDK của chúng tôi.

  • Tìm các bài đăng blog hướng đến nhà phát triển và hướng dẫn tích hợp trên Trung tâm nhà phát triển MongoDB.

  • Tham gia diễn đàn Cộng đồng MongoDB để học hỏi từ các chuyên gia kỹ thuật và nhà phát triển MongoDB khác.

Ghi chú

Đưa ra phản hồi

Làm thế nào mà nó đi?