Trong bài này mình sẽ viết về cách tạo một SignUp Project với NodeJs và MongoDB. Hãy bắt đầu
Tôi sẽ sử dụng Visual Studio Code làm trình biên dịch. Trong dự án này, chúng tôi cần một gói. tập tin json. Đối với điều này, trong thiết bị đầu cuối, chúng tôi sẽ viết
khởi tạo npm
yêu cầu. Sau lệnh đó, để điền vào gói của chúng tôi. json, nó muốn một số thông tin. Tôi để nó như vậy và chỉ cần nhấn Enter. Tôi chỉ cần thay đổi trong gói. json, “chính”. "mục lục. js” vào “máy chủ. js”
Với lệnh npm install Express dotenv sẽ xây dựng các mô-đun Express và dotenv. Vì vậy, lệnh này tạo node_modules và gói-lock. tập tin json
Sau đó, tôi viết npm install -D gật đầu và cài đặt gật đầu
Các mô-đun của chúng tôi, được thấy trong gói. phần "phụ thuộc" của tệp json. Tôi cần thực hiện một số thay đổi trong tệp này. Trong phần “scripts” của tệp, tôi sẽ thay đổi “test” thành “start” và viết. "máy chủ nút". Vì vậy, máy chủ của chúng tôi bắt đầu khi tôi viết npm start. Cứ như thế tôi viết “dev”. “máy chủ gật đầu”
Trong thư mục chính, tôi sẽ tạo máy chủ. tập tin js. Tệp này sẽ là tệp chính của phần phụ trợ của chúng tôi. Hơn tôi sẽ yêu cầu Express và dotenv. Sau đó mình sẽ tạo thư mục Config và trong thư mục này config. env. Cấu hình bên trong. env, chỉ cần viết PORT=5000, vì cổng này là cổng đang chạy của máy chủ của chúng tôi
Vì vậy, chúng tôi có thể đi máy chủ. tập tin js. Tôi sẽ yêu cầu các biến env với dotenv. cấu hình [{đường dẫn. ‘. /config/config. vi'}]
Tôi tạo biến có tên ứng dụng và sử dụng phương thức Express, hơn là với một biến khác có tên là PORT write server’s running port
Sau đó, trong ứng dụng. nghe [] Tôi sẽ cung cấp thông tin PORT và viết trong bảng điều khiển. log `Máy chủ đang chạy trên ${PORT}`. Nó lấy thông tin Port một cách linh hoạt
Máy chủ của chúng tôi. tệp js trông giống như vậy
máy chủ. js
Tôi sẽ viết npm run dev và máy chủ đang chạy
Bây giờ, chúng ta cần Postman. Trong Postman, tôi sẽ tạo một yêu cầu và ghi địa chỉ đang chạy của máy chủ. Trong hướng dẫn này, tôi sẽ sử dụng http. //máy chủ cục bộ/5000
Tôi sẽ đi đến máy chủ. js và sử dụng phương thức get trong Express. Với biến ứng dụng tôi sẽ viết
ứng dụng. get[‘/’, [req, res] => {
độ phân giải. trạng thái[200]. json[{thành công. đúng, tin nhắn. “Hiển thị tất cả người dùng”}];
}];
Tôi sẽ chạy máy chủ với npm run dev và truy cập Postman
Người phát thơ
Điều đó có nghĩa là, mã của chúng tôi thành công. Như vậy, chúng ta cũng sẽ viết các phương thức khác. Tất cả các phương pháp trông giống như
máy chủ. js
Phương pháp với /. id đang hoạt động như http. //máy chủ cục bộ. 5000/1 , những người khác thích http. //máy chủ cục bộ. 5000
Đến giai đoạn này, tôi chạy mọi phương thức trong máy chủ. js nhưng điều đó không đúng. Vì vậy, tôi tạo thư mục bộ điều khiển, trong người dùng này. js và di chuyển tất cả các phương thức với một số thay đổi. người dùng. tập tin js trông giống như
bộ định tuyến/người dùng. js
Để cập nhật dự án của chúng tôi, chúng tôi phải di chuyển mã trong các tuyến/người dùng. js cho bộ điều khiển/người dùng. js và thực hiện một số thay đổi trong tệp đầu tiên. Bạn có thể chạy mọi thứ trong máy chủ. js nhưng nếu dự án của bạn phức tạp hơn thì dự án này bạn phải thực hiện thay đổi này
bộ điều khiển/người dùng. tập tin js trông như thế
bộ điều khiển/người dùng. js
Vì vậy, những gì chúng tôi sẽ làm với các tuyến đường/người dùng. tập tin js? . Chúng tôi yêu cầu bộ điều khiển/người dùng. js, với những người dùng đầu tiên đó. js có phương thức này
hằng số {
nhận người dùng,
người dùng,
tạo người dùng,
người dùng cập nhật,
xóa người dùng
} = yêu cầu [‘. /bộ điều khiển/người dùng’]
tuyến đường/người dùng. tập tin js trông giống như
tuyến đường/người dùng. js
Bây giờ, chúng tôi quay lại máy chủ. js cho các yêu cầu gửi của bạn được thấy trong bảng điều khiển. Đối với điều này, chúng tôi tạo một thư mục có tên là phần mềm trung gian và bên trong đó có một tệp có tên là logger. js. Tập tin này có mã này
Const logger = [req, res, next] => {
Bảng điều khiển. log[`${req. phương thức} ${req. giao thức}. //${req. get['host']}${req. priginUrl}`]
Kế tiếp[];
}
yêu cầu. phương thức là [lấy, đặt. ], yêu cầu. giao thức là http, req. get[‘host’] là máy chủ cục bộ và yêu cầu. originalUrl là / một phần. Trong máy chủ. js, chúng tôi viết ứng dụng. use[logger] và sử dụng phần mềm trung gian này. Nếu bạn quay lại Postman
, gửi yêu cầu và bạn có thể thấy phương thức và url trong thiết bị đầu cuối
Vì vậy, chúng ta phải kết nối cơ sở dữ liệu. Trong hướng dẫn này, chúng tôi sẽ sử dụng MongoDB. Để làm được điều đó, chúng tôi sẽ tạo một tài khoản trong MongoDB và tạo cơ sở dữ liệu, cài đặt MongoDB Compass, sao chép chuỗi kết nối. Chuỗi kết nối trông giống như
mongodb+srv://:@cluster0.fxdx.mongodb.net/test
We change , and test parts. Test will be our database’s name, so you can give it a name as you want.
Sau cài đặt này, chúng tôi có thể kết nối với cơ sở dữ liệu
lệnh npm install mongoose sẽ cài đặt toàn bộ gói. Chúng tôi sẽ tạo thư mục cấu hình và bên trong nó, db. tập tin js. Chúng tôi sẽ đi đến cấu hình. env và tạo biến MONGO_URI, sao chép chuỗi kết nối. db. tập tin js trông giống như
cấu hình/cấu hình. env
Sau tập tin này, chúng tôi sẽ đi đến máy chủ. js vì chúng tôi cần yêu cầu db. tập tin js
const connectDB = yêu cầu[‘. /config/db’]
connectDB[] sẽ kết nối với cơ sở dữ liệu. Trong thiết bị đầu cuối, bạn có thể thấy MongoDB được kết nối
Vì vậy, chúng ta có thể tạo mô hình của mình. Chúng ta sẽ tạo một thư mục có tên models và bên trong nó User. tập tin js. Bạn có thể thay đổi như bạn muốn. tôi tạo ra như vậy
mô hình/Người dùng. js
Bây giờ, chúng ta phải tạo người dùng. Đối với phương pháp này, chúng tôi sẽ thực hiện một số thay đổi trong Postman. Đầu tiên chúng ta sẽ đến phần Headers, bên trong Presets click vào JSON Content Type. Chúng tôi sẽ nhấp vào tùy chọn thô của Body part. Vì vậy, chúng tôi có thể yêu cầu dữ liệu vào cơ sở dữ liệu. Trước đó, MongoDB Compass trông như thế này
Chúng tôi sẽ đi đến bộ điều khiển / người dùng. js, hãy thay đổi hàm createUser bằng cái này
xuất khẩu. createUser = async [req, res, next] => {
const người dùng = đang chờ người dùng. tạo [yêu cầu. thân hình]
độ phân giải. tình trạng[201]. json[{
thành công. ĐÚNG VẬY,
dữ liệu. người dùng
}]
}
Chúng tôi sẽ đi đến Người đưa thư và Đăng một người dùng
Chúng tôi không tạo Người dùng nhưng tôi muốn mã hóa mật khẩu. Đối với điều này, npm install bcryptjs sẽ cài đặt gói bcryptjs và yêu cầu điều này. Sau đó, chúng tôi sẽ viết mã sau theo mô hình của chúng tôi
Lược đồ người dùng. pre['save', async function[next] {
nếu như[. cái này. isModified['mật khẩu']] {
Kế tiếp[];
}
const muối = đang chờ bcrypt. genSalt[10];
cái này. mật khẩu = đang chờ bcrypt. hàm băm [cái này. mật khẩu, muối];
]};
Vì vậy, hãy xem cách lấy tất cả các bản ghi trong cơ sở dữ liệu
xuất khẩu. getUsers = async [req, res, next] => {
thử{
const người dùng = đang chờ người dùng. tìm thấy[];
độ phân giải. trạng thái[200]. json[{thành công. đúng, dữ liệu. người dùng }]
}bắt[err]{
độ phân giải. trạng thái[400]. json[{thành công. SAI}]
}
}
chức năng getUser
xuất khẩu. getUser = async [req, res, next] => {
thử {
const người dùng = đang chờ người dùng. findById[yêu cầu. thông số. nhận dạng];
độ phân giải. trạng thái[200]. json[{thành công. đúng, dữ liệu. người dùng}]
} bắt [lỗi] {
độ phân giải. trạng thái[400]. json[{thành công. SAI}];
}
}
Sự khác biệt giữa các hàm getUser và getUsers là các phương thức find[] và findById[]
Để cập nhật người dùng, chúng tôi mã hóa như vậy
xuất khẩu. updateUser = async [req, res, next] => {
const người dùng = đang chờ người dùng. findByIdAndUpdate[req. thông số. id, yêu cầu. thân hình, {
mới. ĐÚNG VẬY,
runValidators. ĐÚNG VẬY
}]
nếu như[. người dùng] {
trả lại độ phân giải. trạng thái[400]. json[{thành công. SAI}]
}
độ phân giải. trạng thái[200]. json[{thành công. đúng, dữ liệu. người dùng}]
}
Và chức năng xóa người dùng
xuất khẩu. xóaUser = async [req, res, next] => {
thử {
const người dùng = đang chờ người dùng. findByIdAndDelete[req. thông số. nhận dạng]
nếu như[. người dùng] {
trả lại độ phân giải. trạng thái[400]. json[{ thành công. SAI }];
}
độ phân giải. trạng thái[200]. json[{ thành công. đúng, dữ liệu. {} }]
} bắt [lỗi] {
độ phân giải. trạng thái[400]. json[{ thành công. SAI }];
}
}
Vì vậy, hãy xem làm thế nào chúng ta có thể xác minh. Đầu tiên chúng ta sẽ tạo thư mục route và bên trong đó là auth. tập tin js. Như thế này, bộ điều khiển/auth. js sẽ tạo và chúng tôi sẽ chuyển đến tệp này
Chúng tôi sẽ yêu cầu mô hình Người dùng bên trong tệp, như thế
const Người dùng = yêu cầu [‘. /mô hình/Người dùng’]
Sau đó,
xuất khẩu. register = async [req, res, next] => {
const {tên, họ, email, mật khẩu} = req. thân hình;
// Tạo người dùng
const người dùng = đang chờ người dùng. tạo nên[{
họ,
họ,
e-mail,
mật khẩu
}]
độ phân giải. trạng thái[200]. json[{thành công. đúng, mã thông báo, id}]
}
Chúng tôi sẽ lưu nó và đi đến các tuyến/auth. tập tin js và viết
const express = yêu cầu ['bày tỏ']
const { đăng ký, đăng nhập } = yêu cầu [‘. /bộ điều khiển/auth']
Và chúng tôi sẽ đi đến máy chủ. js và sử dụng trong đó
const auth = yêu cầu ['. /tuyến/auth'];
ứng dụng. sử dụng ['/', xác thực];
Bây giờ, hãy vào Postman và Post http. //máy chủ cục bộ. 5000/đăng ký yêu cầu. Kết quả là thành công. đúng, điều đó có nghĩa là nó hoạt động
Chúng tôi sẽ sử dụng jsonwebtoken để kết nối dữ liệu
npm cài đặt jsonwebtoken
sẽ cài đặt gói. Trong bộ điều khiển/xác thực. js, bên dưới Yêu cầu người dùng, chúng tôi sẽ viết
const jwt = yêu cầu['jsonwebtoken']
const getSignedJwtToken = id => {
trả lại jwt. dấu hiệu [{id}, quá trình. env. JWT_BÍ MẬT, {
hết hạnTrong. quá trình. env. JWT_EXPIRE
}]
}
Sau đó, chúng tôi sẽ đi đến cấu hình. env, viết JWT_SECRET = anything, JST_EXPIRE= 30d
Một lần nữa trong bộ điều khiển/auth. js, chúng tôi sẽ viết
mã thông báo const = getSignedJwtToken[người dùng. _nhận dạng];
Và
độ phân giải. trạng thái[200]. json[{thành công. đúng, mã thông báo}]
Sau đó, khi chúng tôi truy cập Postman và gửi yêu cầu, chúng tôi có thể thấy mã thông báo. Sao chép mã thông báo đó và dán https. //jwt. io, bạn sẽ thấy bên dưới Tải trọng. Id phần dữ liệu. Nếu bạn so sánh điều này với trong cơ sở dữ liệu, bạn có thể thấy chúng giống nhau
Cuối cùng chúng ta sẽ đăng nhập. Để so sánh mật khẩu, chúng tôi sẽ lại sử dụng bcryptjs. Chúng tôi sẽ chuyển đến Mô hình người dùng và thêm phương thức mới
Lược đồ người dùng. phương pháp. matchPassword = async function [enteredPassword] {
quay lại chờ bcrypt. so sánh [đã nhập Mật khẩu, cái này. mật khẩu];
};
Sau đó, chúng tôi sẽ chuyển đến bộ điều khiển/auth. js và tạo thông tin đăng nhập. Tạo một thư mục có tên utils và tệp có tên ErrorResponse. js và dán đoạn mã sau vào bên trong nó