Nút trạng thái

Khi chúng ta tạo API với Express và NodeJS, hãy xác định các

app.HTTPMethod(path, middleware)
// HTTPMethod = get, post, put, delete …
4 và trình xử lý của chúng. Trong thế giới hoàn hảo, API chỉ đưa ra yêu cầu đến các tuyến đường đã được xác định. Và các tuyến đường sẽ hoạt động mà không có lỗi. Nhưng nếu bạn để ý, chúng ta không sống trong một thế giới lý tưởng. ). Thể hiện sự hiểu biết về điều này và giúp việc xử lý các lỗi trong API trở nên dễ dàng hơn

Tham thảo thêm API tại đây. 10 cách để viết api yên tĩnh NodeJS chuẩn cơm mẹ nấu luôn

Trong bài viết này, tôi sẽ giải thích cách xử lý lỗi trong Express. Để thực hiện theo các liên hệ, hãy sao chép bản sao lưu trữ này. Please memory install npm after copy repo

Kho lưu trữ có một tệp JavaScript duy nhất, chỉ mục. js with after content


const express = require("express");
const app = express();
const port = 3000;
app.get("/", (req, res, next) => {
 res.send("Welcome to main route!");
});
app.get("/about", (req, res, next) => {
 res.send("This is the about route!");
});
app.listen(port, () => console.log(`App listening on port: ${port}`));

If you don't want to copy repo. Vui lòng tạo một thư mục mới, npm init -y và sau đó npm i –save express. Tạo chỉ mục. js trong thư mục này và sao chép mã vào đó

Nguồn lỗi

Có hai cách cơ bản để xảy ra lỗi trong ứng dụng Express

Đầu tiên là khi yêu cầu được thực hiện đến một đường dẫn mà không có trình xử lý tuyến đường nào được xác định cho nó. Ví dụ, chỉ số. js verify 2

app.HTTPMethod(path, middleware)
// HTTPMethod = get, post, put, delete …
5 route (1. ‘/’ và 2 ‘/về’). Tôi đang sử dụng nhận tuyến đường để có thể dễ dàng kiểm tra các tuyến đường trong trình duyệt. Lưu ý rằng một tuyến đường được xác định là
app.HTTPMethod(path, middleware)
// HTTPMethod = get, post, put, delete …
6  và một phần mềm trung gian sẽ được gọi khi có yêu cầu đến đường dẫn đó

app.HTTPMethod(path, middleware)
// HTTPMethod = get, post, put, delete …

Một nguồn lỗi khác là khi có sự cố xảy ra trong quá trình xử lý lộ trình hoặc bất kỳ nơi nào khác trong mã. Ví dụ. cập nhật route đầu tiên trong `index. js` như sau

…
app.get(‘/’, (req, res, next) => {
 // mimic an error by throwing an error to break the app!
 throw new Error(‘Something went wrong’);
 res.send(‘Welcome to main route!’)
})
…

Khởi động lại server và truy cập localhost. 3000, bạn sẽ được chào đón với một lỗi và một dấu vết ngăn xếp

Xử lý lỗi bộ định tuyến bằng cách sắp xếp chúng

Loại bỏ câu lệnh ném trong chỉ mục. js. Khởi động máy chủ và truy cập localhost. 3000 trong trình duyệt, bạn sẽ thấy thông báo

Welcome to the main route!

Truy cập localhost. 3000/khoảng

This is the about route!

Làm thế nào để Express tra cứu các tuyến đường?

Thể hiện việc tạo ra thứ tự được gọi là bảng định tuyến, nơi đặt các tuyến đường theo thứ tự mà chúng đã được xác định trong mã. Khi một yêu cầu đến web máy chủ, URI được chạy qua bảng định tuyến và kết quả phù hợp đầu tiên trong bảng được sử dụng – ngay cả khi có nhiều hơn một kết quả phù hợp

Nếu không tìm thấy kết quả phù hợp nào thì Express sẽ hiển thị lỗi. Để xem hoạt động này, hãy truy cập localhost. 3000 / contact, browser display

________số 8

Sau khi kiểm tra bảng định tuyến, Express không tìm thấy kết quả phù hợp với /liên hệ, vì vậy nó phản hồi với lỗi

Cách khai thác thứ tự các route

Do Express hiển thị thông báo lỗi khi không tìm thấy kết quả phù hợp nào cho một URI nhất định trong bảng định tuyến, điều này có nghĩa là chúng ta taxác định một tuyến đường để xử lý lỗi bằng cách đảm bảo rằng tuyến đường này là tuyến đường cuối cùng . Lỗi đường dẫn phải phù hợp với tuyến đường trên NodeJS

Bởi vì chúng tôi không biết đường dẫn không tồn tại mà người dùng sẽ yêu cầu, chúng tôi không thể mã hóa một đường dẫn vào lỗi tuyến đường này. Chúng ta cũng không biết yêu cầu có thể sử dụng phương thức HTTP nào, do đó sử dụng ứng dụng. sử dụng () thay vì ứng dụng. lấy

Thêm mã vào chỉ mục tệp. js by way set route after to the end khai báo route, before app. nghe ()

…
// this matches all routes and all methods
app.use((req, res, next) => {
 res.status(404).send({
 status: 404,
 error: ‘Not found’
 })
})app.listen(port …

Khởi động lại máy chủ và truy cập một tuyến đường không được xác định, ví dụ. máy chủ cục bộ. 3000 / blog

Bây giờ, chúng ta có một tùy chỉnh lỗi phản hồi


const express = require("express");
const app = express();
const port = 3000;
app.get("/", (req, res, next) => {
 res.send("Welcome to main route!");
});
app.get("/about", (req, res, next) => {
 res.send("This is the about route!");
});
app.listen(port, () => console.log(`App listening on port: ${port}`));
0

Hãy nhớ rằng thứ tự của các tuyến đường là rất quan trọng để điều này hoạt động. Nếu xử lý lỗi tuyến đường này nằm ở đầu tuyến báo khai báo thì mọi tuyến đường – hợp lệ và không hợp lệ – sẽ được khớp với nó. Chúng ta không muốn điều này, vì vậy lỗi xử lý route phải được xác định sau cùng trong ứng dụng NodeJS

Xử lý bất kỳ loại lỗi nào

Giải pháp từ phần hoạt động trước nếu chúng ta chỉ muốn xử lý lỗi từ các yêu cầu đến tuyến đường không tồn tại. Nhưng nó không xử lý các lỗi khác có thể xảy ra trong ứng dụng và đó là cách xử lý lỗi không hoàn chỉnh. Nó chỉ giải quyết được một nửa vấn đề trong ứng dụng NodeJS

Thêm đoạn mã sau vào chỉ mục. js để xử lý lỗi trong route get first


const express = require("express");
const app = express();
const port = 3000;
app.get("/", (req, res, next) => {
 res.send("Welcome to main route!");
});
app.get("/about", (req, res, next) => {
 res.send("This is the about route!");
});
app.listen(port, () => console.log(`App listening on port: ${port}`));
1

Nếu bạn truy cập localhost. 3000, bạn vẫn sẽ thấy phản hồi của trình xử lý lỗi mặc định Express

Xác định lỗi xử lý lỗi trong phần mềm trung gian

Các phần mềm trung gian xử lý lỗi được khai báo giống như các phần mềm trung gian chức năng khác, ngoại trừ việc chúng có bốn đối số thay vì ba. Ví dụ


const express = require("express");
const app = express();
const port = 3000;
app.get("/", (req, res, next) => {
 res.send("Welcome to main route!");
});
app.get("/about", (req, res, next) => {
 res.send("This is the about route!");
});
app.listen(port, () => console.log(`App listening on port: ${port}`));
2

Đặt mã này sau khi khai báo tuyến đường trong chỉ mục. js trước ứng dụng. nghe. And after app. sử dụng đầu tiên, khởi động lại máy chủ rồi truy cập localhost. 3000. Bây giờ phản hồi là

app.HTTPMethod(path, middleware)
// HTTPMethod = get, post, put, delete …
0

Bây giờ, chúng ta đang xử lý cả hai loại lỗi. à há

Điều này có hiệu quả nhưng chúng ta có thể cải thiện nó không? . và làm như thế nào?

Khi bạn chuyển một đối số sang next (), Express sẽ cho rằng đây là lỗi và nó sẽ bỏ qua tất cả các tuyến đường khác. And send any thứ gì đã được chuyển đến next() to middleware process error has been verify

Edit edit file

app.HTTPMethod(path, middleware)
// HTTPMethod = get, post, put, delete …
7 as after

app.HTTPMethod(path, middleware)
// HTTPMethod = get, post, put, delete …
1

Xử lý lỗi chức năng phần mềm trung gian xử lý yêu cầu xấu đã được chuyển giao cho phần mềm trung gian xử lý lỗi. next (error) time. ‘Này, Ngài xử lý lỗi đi, tôi gặp lỗi, hãy xử lý nó đi. ’

Để chắc chắn rằng bạn đang ở trên cùng một trang với tôi, lỗi dòng. trạng thái. 500 nghĩa rằng nếu đối tượng lỗi không thuộc tính trạng thái, chúng ta sử dụng 500 làm mã trạng thái. Nội dung đầy đủ của chỉ mục. js is

app.HTTPMethod(path, middleware)
// HTTPMethod = get, post, put, delete …
2

Nếu bạn đang cung cấp các tĩnh trang thay vì gửi phản hồi JSON, thì logic vẫn giống nhau. Bạn chỉ cần thay đổi những gì xảy ra trong quá trình xử lý lỗi. Ví dụ

app.HTTPMethod(path, middleware)
// HTTPMethod = get, post, put, delete …
3

Nếu bạn thấy bài viết này hữu ích, vui lòng chia sẻ với bạn bè và những người theo dõi bạn và xem các bài viết khác của tôi. ^^