9

Tôi đang sử dụng bộ định tuyến phản ứng làm gốc và tất cả các yêu cầu trong "/" được chuyển hướng đến bộ định tuyến phản ứng. Và khi bộ định tuyến phản ứng thấy rằng url không khớp với bất kỳ thành phần nào được xác định, nó sẽ hiển thị thành phần NoMatch. Và đây là vấn đề, NoMatch được trả lại và đó là những gì tôi muốn, nhưng mã trạng thái vẫn là 200 thay vì 404. Và khi các tệp css hoặc js của tôi được đặt với bộ định tuyến phản hồi url sai thì cũng giống như vậy, nó phản hồi bằng 200 ! Và sau đó trang cho tôi biết rằng có một số vấn đề với loại nội dung tài nguyên của tôi!Làm cách nào để phản hồi bộ định tuyến phản hồi với mã trạng thái 404?

Vì vậy, làm cách nào tôi có thể sử dụng bộ định tuyến phản ứng để xử lý mọi thứ trong "/" mà vẫn xử lý lỗi 404 (để trả lời mã trạng thái 404)?

mã trong phản ứng Router

render((
    <Router history={browserHistory}> 
    <Route path="/" component={App}> 
     <IndexRoute component={Index}/> 
     <Route path="archived" component={App}> 
     <IndexRoute component={ArchivedPage}/> 
     <Route path="project/:projectId" component={ArchivedDetailPage}/> 
     </Route> 
     <Route path="*" component={NoMatch}/> 
    </Route> 
    </Router> 
), document.getElementById('app')); 

các servre bên

router.use('/', function(req, res, next) { 
    res.render('index-react', { 
     title: 'some title' 
    }); 
    }); 
+0

Bạn đã nghĩ ra điều gì? Chia sẻ một số mã –

+0

mã được phục vụ ngay bây giờ – Liang

+0

Tôi thêm rằng prop, nhưng phản ứng router đã không xử lý này, nó sẽ không phát ra lỗi trạng thái 404. Có thể phát ra lỗi trạng thái 404 qua javascript không? – Liang

Trả lời

2

Để làm điều này, bạn cần phải chạy trận đấu trên máy chủ là tốt, để xem một trận tuyến. Tất nhiên, nếu bạn định làm điều này, bạn cũng có thể thực hiện việc dựng hình phía máy chủ đầy đủ! Tham khảo server rendering guide.

+3

Tôi thích sự trớ trêu của liên kết này tới trang 404 :-) – Philiiiiiipp

+0

liên kết được cập nhật cho tương lai của tôi: https://reacttraining.com/react-router/web/guides/server-rendering – eselk

10

Với phản ứng-router 2.0.0 bạn có thể làm:

<Route path="*" component={NoMatch} status={404}/> 
5

Zen: mã lỗi của một mạng im lặng là gì?

Tôi cũng bối rối về câu hỏi này. Trường hợp kỳ lạ, bạn không thay đổi mã lỗi HTTP. Chúng tôi nghĩ rằng chúng ta nên, bởi vì một URL ngẫu nhiên được gọi, nhưng tại sao?

Trong SPA (Single Page Application), không có lưu lượng truy cập mạng nhưng chỉ chuyển đổi các khay. Mã lỗi HTTP nằm trong tiêu đề để phân phối trang mới, trong khi tất cả nội dung nằm trong tên <div> không tải lại trang mới. Người ta sẽ cần phải tung ra trang, truyền tải và render một trang mới để có mã trả về 404, và sau đó gửi lại trang gốc khi người dùng di chuyển đi.

Và, chỉ người dùng của nó. Mã lỗi 404 hoặc bất kỳ mã HTTP nào khác, thực sự là gợi ý cho trình duyệt hoặc dịch vụ. Nếu người yêu cầu là một trình duyệt, con người được đưa ra một dấu hiệu tốt hơn so với trình duyệt có thể cung cấp. Nếu người yêu cầu là một trình thu thập thông tin, nó có thể quét 404 trong số <h1>. Nếu người yêu cầu đang sử dụng trang web của bạn làm API, thì tại sao lại là một điều tốt?

Vì vậy, câu trả lời là chúng tôi đặt các mã trạng thái HTTP ra khỏi thói quen. Đừng.

Các vấn đề liên quan