cuốn sách gpt4 ai đã làm

ruby - Tạm dừng bộ lọc Trước nhưng vẫn tiếp tục bộ lọc Sau

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 16:30:15 34 4
mua khóa gpt4 Nike

Vì vậy, sự hiểu biết của tôi là lệnh tạm dừng có nhiệm vụ dừng các yêu cầu trong bộ lọc hiện tại, nhưng nó dường như vẫn tiếp tục. Dưới đây là một ứng dụng Sinatra rất đơn giản thể hiện điều này.

máy chủ.rb

yêu cầu 'sinatra'

trước khi làm
đặt "trước khi dừng"
tạm dừng 401
đặt "sau khi tạm dừng"
end

trước '/partners*' làm
đặt "tôi ở trước /đối tác"
end

sau '/partners*' làm
đặt "tôi theo sau /đối tác"
end

nhận '/partners/v1/:public_id' làm
đặt "tôi đang đi trên tuyến đường thực tế"
end

Tôi gọi "get" tại:localhost:4567/đối tác/v1/111
Tôi mong đợi đầu ra:

trước khi dừng lại

Đầu ra thực sự là gì:

trước khi dừng lại
tôi đang theo dõi/đối tác

所以我的问题是:
1. Tại sao điểm dừng vẫn tiếp tục (hiển thị là điểm đến sau '/đối tác*')
2. Tại sao nó lại trúngsau '/đối tác*' thay vìtrước '/đối tác*'

câu trả lời hay nhất

Đây là mã cho dừng lạiđây là mã cho gọi , trong khi ở gọi Dưới đây là khai báo phương thức cho gửi đi!

如您所见,gửi đi! gọi gọi, chạy với sự hỗ trợ cho dừng lạikhối định tuyến của ing. nó vẫn ở đó gọi Chạy theo khối :trước lọc.

gọi làm
tĩnh! nếu settings.static? && (request.get? || request.head?)
lọc! :trước
tuyến đường!

Vì vậy, bạn có thể trước bộ lọc bên trong暂停, nó sẽ không đến được tuyến đường, đó là lý do tại sao bạn không thấy bất kỳ đầu ra nào từ khối tuyến đường.

Nhưng,gửi đi! Có một phương pháp khácđảm bảo:

đảm bảo
begin
lọc! :after trừ khi env['sinatra.static_file']

确保Hãy làm những gì nó nói,nó sẽ luôn được đánh giá. Đây là thỏa thuận sau '/đối tác*' Nguyên nhân bị chặn. Đây là hành vi được mong đợi (vì nó được mã hóa rõ ràng theo cách này). Về cơ bản, nếu bạn đặt after block , nó sẽ được xử lý bất kể trước trong bộ lọc hoặc khối định tuyến dừng lạiS.

Từ tài liệu:

Các tuyến đường được khớp theo thứ tự chúng được xác định. Tuyến đường đầu tiên phù hợp với yêu cầu sẽ được gọi.

and

…bộ lọc được đánh giá trước mỗi yêu cầu trong cùng bối cảnh với các tuyến đường

Bây giờ, các tài liệu không nêu rõ điều này, nhưng nếu bạn đặt hai dấu ngoặc kép lại với nhau, tôi sẽ cho rằng nó có nghĩa là "Các bộ lọc khớp với thứ tự chúng được xác định." Về cơ bản, vì nó khớp với hành vi thực tế.

tất cả trước tất cả các bộ lọc đều sẽ chạy, nhưng bạn đặt dừng lại, vì vậy bộ lọc thứ hai (trước '/đối tác*') không chạy.

Về ruby ​​​​- tạm dừng ở Bộ lọc trước và vẫn tiếp tục bộ lọc Sau, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/17331912/

34 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress