Mẹo. đảm bảo rằng bạn đã cài đặt cơ sở dữ liệu MongoDB trên hệ thống của mình trước khi tiếp tục với hướng dẫn (hoặc sử dụng cơ sở dữ liệu MongoDB trên đám mây nếu bạn thích)
Nhiệm vụ của chúng ta là tạo một ứng dụng tính chi phí chuyến đi
Hãy tưởng tượng bạn đang đi du lịch và bạn có ứng dụng của mình (có thể là ứng dụng web tiến bộ hoặc ứng dụng dành cho thiết bị di động chẳng hạn) nơi bạn thêm bất kỳ chi phí nào bạn kiếm được. Xăng dầu, khách sạn, thực phẩm, vé, v.v.
Khi chuyến đi kết thúc, bạn lưu trữ nó và nó trở thành một phần của lịch sử - bạn có thể điều hướng và xem số tiền bạn đã chi tiêu trong các chuyến đi trước đây
Chúng tôi sẽ không tạo giao diện người dùng của ứng dụng ở đây, chỉ là API
Bây giờ chúng ta hãy phân tích điều này thành chi tiết và dịch nó thành một loạt các điểm cuối API
Điểm cuối là một URL duy nhất mà chúng tôi sẽ gọi để tạo một thao tác
Giống như thêm một chuyến đi mới với tên của nó
Lúc đầu, không có chuyến đi nào được lưu trữ và chúng tôi cần thêm một chuyến đi. Tôi tưởng tượng ứng dụng sẽ hỏi tên người dùng và sẽ có nút “Tạo chuyến đi”. Khi nhấn vào, app sẽ gửi tên cho chúng ta, đến endpoint POST /expense { trip, date, amount, category, description }8 với phương thức HTTP POST /expense { trip, date, amount, category, description }9
Chúng tôi có điểm cuối đầu tiên, điểm cuối này sẽ chấp nhận thuộc tính GET /expenses { trip }0
POST /trip { name }Một điểm cuối khác sẽ liệt kê các chuyến đi và đó là
GET /tripsTheo mặc định, nó sẽ trả về các chuyến đi được sắp xếp theo ngày tạo
Khi người dùng muốn thêm một khoản chi phí mới, ứng dụng sẽ gọi điểm cuối GET /expenses { trip }1 bằng phương thức POST, với một số tham số mô tả khoản chi phí đó
POST /expense { trip, date, amount, category, description }GET /expenses { trip }2 là ID của chuyến đi hiện được chọn
GET /expenses { trip }3 là tên của loại chi phí. Chúng tôi sẽ cung cấp một danh sách các danh mục để lựa chọn, đây là danh sách tĩnh. GET /expenses { trip }4, GET /expenses { trip }5, GET /expenses { trip }6, GET /expenses { trip }7
Khi chúng tôi muốn truy xuất chi phí chuyến đi, chúng tôi gọi điểm cuối GET /expenses { trip }8 bằng phương thức GET
GET /expenses { trip }chuyển số nhận dạng GET /expenses { trip }2
Hãy bắt đầu dự án
Tôi sẽ sử dụng bản cài đặt cục bộ của Node. js
Chúng tôi bắt đầu nút của chúng tôi. js bằng cách vào một thư mục mới (gọi nó là npm install mongodb0) và gõ lệnh npm install mongodb1
Chúng tôi sẽ sử dụng MongoDB làm cơ sở dữ liệu của mình
Cài đặt nút npm install mongodb2. gói js với
npm install mongodbTrong khi bạn ở đây, hãy cài đặt cả Express
npm install expressTạo một tệp npm install mongodb3 ngay bây giờ, nơi chúng tôi sẽ lưu trữ mã API của mình và bắt đầu yêu cầu Express và MongoDB
const express = require("express") const mongo = require("mongodb").MongoClientKhởi tạo ứng dụng Express
const app = express()Và bây giờ chúng tôi có thể thêm sơ khai cho các điểm cuối API mà chúng tôi hỗ trợ
app.post("/trip", (req, res) => { /* */ }) app.get("/trips", (req, res) => { /* */ }) app.post("/expense", (req, res) => { /* */ }) app.get("/expenses", (req, res) => { /* */ })Cuối cùng, sử dụng phương pháp npm install mongodb4 trên npm install mongodb5 để khởi động máy chủ
app.listen(3000, () => console.log("Server ready"))Bạn có thể chạy ứng dụng bằng cách sử dụng npm install mongodb6 trong thư mục dự án
Thêm chuyến đi
Chúng tôi cung cấp cho khách hàng một cách để thêm chuyến đi bằng cách sử dụng điểm cuối npm install mongodb7
GET /trips0Hãy tiếp tục và thực hiện nó
Chúng tôi đã bao gồm thư viện MongoDB, vì vậy chúng tôi có thể sử dụng nó trong quá trình triển khai điểm cuối của mình
GET /trips1Tiếp theo, chúng tôi xây dựng URL máy chủ MongoDB. Nếu bạn đang chạy dự án cục bộ và MongoDB cục bộ, URL có thể là thế này
GET /trips2vì npm install mongodb8 là cổng mặc định
Tiếp theo, hãy kết nối với cơ sở dữ liệu bằng cách sử dụng npm install mongodb9
GET /trips3và trong khi chúng ta ở đây, chúng ta cũng hãy tham khảo các chuyến đi và bộ sưu tập chi phí
GET /trips4Bây giờ chúng ta có thể quay lại điểm cuối của mình
Điểm cuối này mong đợi 1 tham số, GET /expenses { trip }0, đại diện cho cách chúng tôi gọi chuyến đi của mình. Ví dụ: Thụy Điển 2018 hoặc Yosemite tháng 8 năm 2018
Xem hướng dẫn của tôi về cách truy xuất các tham số truy vấn POST bằng Express
Chúng tôi mong đợi dữ liệu đến dưới dạng JSON, sử dụng npm install express1, vì vậy chúng tôi cần sử dụng phần mềm trung gian npm install express2
GET /trips5Bây giờ chúng tôi có thể truy cập dữ liệu bằng cách tham khảo nó từ npm install express3
GET /trips6Sau khi có tên, chúng ta có thể sử dụng phương thức npm install express4 để thêm chuyến đi vào cơ sở dữ liệu
GET /trips7Nếu bạn gặp lỗi như “không thể đọc phần chèn thuộc tínhMột trong số không xác định”, hãy đảm bảo rằng _____20_______5 được đặt thành công trong ____20_______6. Thêm bảng điều khiển. log(trips) trước khi gọi insertOne() để đảm bảo rằng nó chứa đối tượng bộ sưu tập
Chúng tôi xử lý lỗi, nếu có trong biến npm install express7, nếu không, chúng tôi sẽ gửi phản hồi 200 (thành công) cho khách hàng, thêm thông báo npm install express8 vào phản hồi JSON
GET /trips8Đó là nó
Bây giờ hãy khởi động lại ứng dụng Node bằng cách nhấn npm install express9 để dừng ứng dụng và chạy lại
Bạn có thể kiểm tra điểm cuối này bằng ứng dụng Insomnia, một cách tuyệt vời để kiểm tra và tương tác với điểm cuối REST
Liệt kê các chuyến đi
Danh sách các chuyến đi được trả về bởi điểm cuối const express = require("express") const mongo = require("mongodb").MongoClient0. Nó không chấp nhận tham số nào
GET /trips9Chúng tôi đã khởi tạo bộ sưu tập npm install express5, vì vậy chúng tôi có thể truy cập trực tiếp vào bộ sưu tập đó để lấy danh sách
Chúng tôi sử dụng phương pháp const express = require("express") const mongo = require("mongodb").MongoClient2, kết quả là chúng tôi phải chuyển đổi thành một mảng bằng cách sử dụng const express = require("express") const mongo = require("mongodb").MongoClient3
POST /expense { trip, date, amount, category, description }0Sau đó, chúng tôi có thể xử lý các kết quả npm install express7 và const express = require("express") const mongo = require("mongodb").MongoClient5
POST /expense { trip, date, amount, category, description }1Đây là kết quả của lệnh gọi API trong Insomnia
Thêm một khoản chi phí
Trước đây chúng tôi đã nhận được danh sách các chuyến đi. Mỗi chuyến đi có một thuộc tính const express = require("express") const mongo = require("mongodb").MongoClient6 được liên kết được MongoDB thêm trực tiếp khi nó được thêm vào
POST /expense { trip, date, amount, category, description }2Chúng tôi sẽ sử dụng const express = require("express") const mongo = require("mongodb").MongoClient6 này để đăng ký một khoản chi phí mới
Nếu bạn còn nhớ, điểm cuối để thêm chi phí mới là đây
POST /expense { trip, date, amount, category, description }GET /expenses { trip }2 trong trường hợp này sẽ là const express = require("express") const mongo = require("mongodb").MongoClient6 của một trong những chuyến đi mà chúng tôi đã đăng ký trước đó. Hãy tưởng tượng rằng trong ứng dụng, người dùng sẽ thêm một chuyến đi và chuyến đi đó sẽ vẫn là chuyến đi hiện tại cho đến khi một chuyến đi mới được thêm (hoặc chọn)
Hãy tiếp tục và triển khai sơ khai của chúng ta
POST /expense { trip, date, amount, category, description }4Giống như khi thêm một chuyến đi, chúng ta sẽ sử dụng phương thức insertOne(), lần này là trên bộ sưu tập const app = express()0
Chúng tôi nhận được 5 tham số từ phần thân yêu cầu
- GET /expenses { trip }2
- const app = express()2 ngày, ở định dạng ISO 8601 (e. g. const app = express()3), theo múi giờ GMT
- const app = express()4 một số nguyên với số tiền
- GET /expenses { trip }3 là một từ GET /expenses { trip }4, GET /expenses { trip }5, GET /expenses { trip }6, GET /expenses { trip }7
- app.post("/trip", (req, res) => { /* */ }) app.get("/trips", (req, res) => { /* */ }) app.post("/expense", (req, res) => { /* */ }) app.get("/expenses", (req, res) => { /* */ })0 mô tả chi phí, vì vậy chúng tôi sẽ nhớ về nó sau
Liệt kê tất cả các khoản chi
Phần cuối cùng của câu đố là nhận được các chi phí
Chúng ta cần điền vào GET /expenses { trip }8 endpoint stub, cái cuối cùng còn thiếu
POST /expense { trip, date, amount, category, description }6Điểm cuối này chấp nhận tham số GET /expenses { trip }2, là thuộc tính const express = require("express") const mongo = require("mongodb").MongoClient6 của chuyến đi được lưu trữ trong cơ sở dữ liệu