ExpressJS - Cơ sở dữ liệu
Chúng tôi tiếp tục nhận được yêu cầu, nhưng cuối cùng không lưu trữ chúng ở bất kỳ đâu. Chúng tôi cần một Cơ sở dữ liệu để lưu trữ dữ liệu. Đối với điều này, chúng tôi sẽ sử dụng cơ sở dữ liệu NoSQL được gọi làMongoDB.
Để cài đặt và đọc về Mongo, hãy nhấp vào liên kết này.
Để sử dụng Mongo với Express, chúng tôi cần một API ứng dụng khách cho nút. Có nhiều lựa chọn cho chúng tôi, nhưng đối với hướng dẫn này, chúng tôi sẽ bám vào mongoose . Mongoose được sử dụng chodocument Modelingtrong Node cho MongoDB. Đối với mô hình tài liệu, chúng tôi tạoModel (giống như một class trong lập trình hướng tài liệu), và sau đó chúng tôi sản xuất documents sử dụng Mô hình này (giống như chúng tôi tạo documents of a classtrong OOP). Tất cả quá trình xử lý của chúng tôi sẽ được thực hiện trên các "tài liệu" này, sau đó cuối cùng, chúng tôi sẽ ghi các tài liệu này vào cơ sở dữ liệu của mình.
Thiết lập Mongoose
Bây giờ bạn đã cài đặt Mongo, hãy để chúng tôi cài đặt Mongoose, giống như cách chúng tôi đã cài đặt các gói nút khác của mình -
npm install --save mongoose
Trước khi bắt đầu sử dụng mongoose, chúng ta phải tạo cơ sở dữ liệu bằng cách sử dụng Mongo shell. Để tạo cơ sở dữ liệu mới, hãy mở thiết bị đầu cuối của bạn và nhập "mongo". Một trình bao Mongo sẽ bắt đầu, hãy nhập mã sau:
use my_db
Một cơ sở dữ liệu mới sẽ được tạo cho bạn. Bất cứ khi nào bạn mở mongo shell, nó sẽ mặc định là "test" db và bạn sẽ phải thay đổi cơ sở dữ liệu của mình bằng cách sử dụng lệnh tương tự như trên.
Để sử dụng Mongoose, chúng tôi sẽ yêu cầu nó trong index.js tệp và sau đó kết nối với mongodb dịch vụ đang chạy mongodb://localhost.
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/my_db');
Bây giờ ứng dụng của chúng tôi đã được kết nối với cơ sở dữ liệu của chúng tôi, hãy để chúng tôi tạo một Mô hình mới. Mô hình này sẽ hoạt động như một tập hợp trong cơ sở dữ liệu của chúng tôi. Để tạo Mô hình mới, hãy sử dụng mã sau, trước khi xác định bất kỳ tuyến nào -
var personSchema = mongoose.Schema({
name: String,
age: Number,
nationality: String
});
var Person = mongoose.model("Person", personSchema);
Đoạn mã trên xác định lược đồ cho một người và được sử dụng để tạo Chế độ Mongoose Person.
Lưu tài liệu
Bây giờ, chúng ta sẽ tạo một dạng html mới; biểu mẫu này sẽ giúp bạn lấy thông tin chi tiết của một người và lưu vào cơ sở dữ liệu của chúng tôi. Để tạo biểu mẫu, hãy tạo một tệp dạng xem mới có tênperson.pug trong thư mục views với nội dung sau:
html
head
title Person
body
form(action = "/person", method = "POST")
div
label(for = "name") Name:
input(name = "name")
br
div
label(for = "age") Age:
input(name = "age")
br
div
label(for = "nationality") Nationality:
input(name = "nationality")
br
button(type = "submit") Create new person
Cũng thêm một new get route trong index.js để hiển thị tài liệu này -
app.get('/person', function(req, res){
res.render('person');
});
Đi đến "localhost:3000/person"để kiểm tra xem biểu mẫu có hiển thị đúng đầu ra hay không. Lưu ý rằng đây chỉ là giao diện người dùng, nó chưa hoạt động. Ảnh chụp màn hình sau đây cho biết cách biểu mẫu được hiển thị -
Bây giờ chúng ta sẽ xác định một trình xử lý tuyến đường tại '/person' cái nào sẽ xử lý yêu cầu này
app.post('/person', function(req, res){
var personInfo = req.body; //Get the parsed information
if(!personInfo.name || !personInfo.age || !personInfo.nationality){
res.render('show_message', {
message: "Sorry, you provided worng info", type: "error"});
} else {
var newPerson = new Person({
name: personInfo.name,
age: personInfo.age,
nationality: personInfo.nationality
});
newPerson.save(function(err, Person){
if(err)
res.render('show_message', {message: "Database error", type: "error"});
else
res.render('show_message', {
message: "New person added", type: "success", person: personInfo});
});
}
});
Trong đoạn mã trên, nếu chúng tôi nhận được bất kỳ trường trống nào hoặc không nhận được bất kỳ trường nào, chúng tôi sẽ gửi phản hồi lỗi. Nhưng nếu chúng tôi nhận được một tài liệu được định dạng tốt, thì chúng tôi sẽ tạonewPerson tài liệu từ mô hình Person và lưu nó vào DB của chúng tôi bằng cách sử dụng newPerson.save()chức năng. Điều này được định nghĩa trong Mongoose và chấp nhận một cuộc gọi lại làm đối số. Lệnh gọi lại này có 2 đối số - lỗi và phản hồi. Các đối số này sẽ hiển thịshow_message lượt xem.
Để hiển thị phản hồi từ tuyến đường này, chúng tôi cũng sẽ cần tạo show_messagelượt xem. Tạo một dạng xem mới với mã sau:
html
head
title Person
body
if(type == "error")
h3(style = "color:red") #{message}
else
h3 New person,
name: #{person.name},
age: #{person.age} and
nationality: #{person.nationality} added!
Chúng tôi sẽ nhận được phản hồi sau khi gửi thành công form(show_message.pug) -
Bây giờ chúng ta có một giao diện để tạo persons.
Lấy tài liệu
Mongoose cung cấp rất nhiều chức năng để lấy tài liệu, chúng tôi sẽ tập trung vào 3 trong số đó. Tất cả các hàm này cũng nhận một cuộc gọi lại làm tham số cuối cùng và cũng giống như hàm lưu, các đối số của chúng là lỗi và phản hồi. Ba chức năng như sau:
Model.find (điều kiện, gọi lại)
Hàm này tìm tất cả các tài liệu khớp với các trường trong đối tượng điều kiện. Các toán tử tương tự được sử dụng trong Mongo cũng hoạt động trong mongoose. Ví dụ,
Person.find(function(err, response){
console.log(response);
});
Thao tác này sẽ tìm nạp tất cả các tài liệu từ bộ sưu tập của người đó.
Person.find({name: "Ayush", age: 20},
function(err, response){
console.log(response);
});
Thao tác này sẽ tìm nạp tất cả các tài liệu có tên trường là "Ayush" và tuổi là 20.
Chúng tôi cũng có thể cung cấp phép chiếu mà chúng tôi cần, tức là, các trường chúng tôi cần. Ví dụ, nếu chúng ta chỉ muốnnames của những người có nationalitylà "tiếng Ấn Độ" , chúng tôi sử dụng -
Person.find({nationality: "Indian"}, "name", function(err, response){
console.log(response);
});
Model.findOne (điều kiện, gọi lại)
Hàm này luôn tìm nạp một tài liệu duy nhất, phù hợp nhất. Nó có các đối số chính xác giống nhưModel.find().
Model.findById (id, callback)
Chức năng này có trong _id(được định nghĩa bởi mongo) làm đối số đầu tiên, một chuỗi chiếu tùy chọn và một lệnh gọi lại để xử lý phản hồi. Ví dụ,
Person.findById("507f1f77bcf86cd799439011", function(err, response){
console.log(response);
});
Bây giờ chúng ta hãy tạo một tuyến đường để xem tất cả hồ sơ của mọi người -
var express = require('express');
var app = express();
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/my_db');
var personSchema = mongoose.Schema({
name: String,
age: Number,
nationality: String
});
var Person = mongoose.model("Person", personSchema);
app.get('/people', function(req, res){
Person.find(function(err, response){
res.json(response);
});
});
app.listen(3000);
Cập nhật tài liệu
Mongoose cung cấp 3 chức năng để cập nhật tài liệu. Các chức năng được mô tả bên dưới:
Model.update (tình trạng, cập nhật, gọi lại)
Hàm này nhận một điều kiện và cập nhật một đối tượng làm đầu vào và áp dụng các thay đổi cho tất cả các tài liệu phù hợp với các điều kiện trong bộ sưu tập. Ví dụ: mã sau sẽ cập nhật quốc tịch "Mỹ" trong tất cả các tài liệu về Người -
Person.update({age: 25}, {nationality: "American"}, function(err, response){
console.log(response);
});
Model.findOneAndUpdate (tình trạng, cập nhật, gọi lại)
Nó tìm một tài liệu dựa trên truy vấn và cập nhật tài liệu đó theo đối số thứ hai. Nó cũng nhận một cuộc gọi lại làm đối số cuối cùng. Hãy để chúng tôi thực hiện ví dụ sau để hiểu chức năng
Person.findOneAndUpdate({name: "Ayush"}, {age: 40}, function(err, response) {
console.log(response);
});
Model.findByIdAndUpdate (id, cập nhật, gọi lại)
Hàm này cập nhật một tài liệu duy nhất được xác định bằng id của nó. Ví dụ,
Person.findByIdAndUpdate("507f1f77bcf86cd799439011", {name: "James"},
function(err, response){
console.log(response);
});
Bây giờ chúng ta hãy tạo một lộ trình để cập nhật cho mọi người. Đây sẽ là mộtPUT định tuyến với id làm tham số và chi tiết trong tải trọng.
var express = require('express');
var app = express();
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/my_db');
var personSchema = mongoose.Schema({
name: String,
age: Number,
nationality: String
});
var Person = mongoose.model("Person", personSchema);
app.put('/people/:id', function(req, res){
Person.findByIdAndUpdate(req.params.id, req.body, function(err, response){
if(err) res.json({message: "Error in updating person with id " + req.params.id});
res.json(response);
});
});
app.listen(3000);
Để kiểm tra tuyến đường này, hãy nhập thông tin sau vào thiết bị đầu cuối của bạn (thay thế id bằng một id từ people) -
curl -X PUT --data "name = James&age = 20&nationality = American
"http://localhost:3000/people/507f1f77bcf86cd799439011
Thao tác này sẽ cập nhật tài liệu được liên kết với id được cung cấp trong lộ trình với các chi tiết ở trên.
Xóa tài liệu
Chúng tôi đã bảo hiểm Create, Read và Update, bây giờ chúng ta sẽ xem cách Mongoose có thể được sử dụng để Deletecác tài liệu. Chúng tôi có 3 chức năng ở đây, giống hệt như cập nhật.
Model.remove (điều kiện, [gọi lại])
Hàm này nhận một đối tượng điều kiện làm đầu vào và loại bỏ tất cả các tài liệu phù hợp với điều kiện. Ví dụ: nếu chúng ta cần xóa tất cả những người ở độ tuổi 20, hãy sử dụng cú pháp sau:
Person.remove({age:20});
Model.findOneAndRemove (điều kiện, [gọi lại])
Chức năng này loại bỏ một single, tài liệu có liên quan nhất theo đối tượng điều kiện. Hãy để chúng tôi thực thi đoạn mã sau để hiểu tương tự.
Person.findOneAndRemove({name: "Ayush"});
Model.findByIdAndRemove (id, [gọi lại])
Hàm này loại bỏ một tài liệu duy nhất được xác định bởi id của nó. Ví dụ,
Person.findByIdAndRemove("507f1f77bcf86cd799439011");
Bây giờ chúng ta hãy tạo một lộ trình để xóa mọi người khỏi cơ sở dữ liệu của mình.
var express = require('express');
var app = express();
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/my_db');
var personSchema = mongoose.Schema({
name: String,
age: Number,
nationality: String
});
var Person = mongoose.model("Person", personSchema);
app.delete('/people/:id', function(req, res){
Person.findByIdAndRemove(req.params.id, function(err, response){
if(err) res.json({message: "Error in deleting record id " + req.params.id});
else res.json({message: "Person with id " + req.params.id + " removed."});
});
});
app.listen(3000);
Để kiểm tra kết quả đầu ra, hãy sử dụng lệnh curl sau:
curl -X DELETE http://localhost:3000/people/507f1f77bcf86cd799439011
Thao tác này sẽ xóa người có id đã cho tạo ra thông báo sau:
{message: "Person with id 507f1f77bcf86cd799439011 removed."}
Phần này tóm tắt cách chúng ta có thể tạo các ứng dụng CRUD đơn giản bằng MongoDB, Mongoose và Express. Để khám phá thêm về Mongoose, hãy đọc tài liệu API.