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 Show
Điều kiện tiên quyế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
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ọcReactJS 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. jsimport { 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. jsexport default { database: { url: 'mongodb://localhost:27017/example' } }; người phục vụ. jsimport 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ễnKỹ 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 nhanhNế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ắ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
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 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 MẹoLệ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ờ 72 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ó Để 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.
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 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 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 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 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. Làm quen với ứng dụng mẫuBâ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 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
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ả
Lớp
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
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ừ
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
Ứ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
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
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ênBâ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 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ất1 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 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ẹoTrong ứ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 Bây giờ chúng ta có một 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 9Ghi chúTại sao điều này không phá vỡ đồng bộ hóaTại thời điểm này, mô hình React Native 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 đâuViệ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 Mô hình dữ liệu của ứng dụng của bạn hiện bao gồm một 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 3Nế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
MẹoBạ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 93TạoToDoPrompt. js 6Sau đó, sửa đổi thành phần 94
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 99, sửa đổi chức năng 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 30ItemListView. 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 35ItemListView. 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 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 Cập nhật đăng ký đồng bộ hóaGiao 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 Đầu tiên, thêm một móc nố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 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 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 2 vào danh sách phụ thuộc trong đối số thứ hai của 393 Ứ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 4 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 Đầu tiên, tìm thư mục 9 của ứng dụng mẫu và sửa đổi 6import { 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 9 để triển khai cấu hình đồng bộ hóa đã cập nhật 05 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" Cái gì tiếp theo?
Ghi chúĐưa ra phản hồiLàm thế nào mà nó đi? |