2014-11-18 23 views
9

Khi tôi nhấn tuyến đường không tồn tại trên ứng dụng Meteor sử dụng IR, tôi nhận được phản hồi 200 với HTML (khi được hiển thị trên trình duyệt) sẽ hiển thị lỗi js trên bảng điều khiển nói rằng No route found for path: "/aRoute".Cách trả lại 404 bằng Bộ định tuyến sắt

Làm cách nào để có thể trả lại 404?

Trả lời

7

Có dường như không thể là một cách chính xác (hoặc thậm chí làm việc?) Xử lý của 404 thực ngay bây giờ. Xem vấn đề này ví dụ: https://github.com/EventedMind/iron-router/issues/1055

Ngay cả khi bạn thử cách mà nên hoạt động, bạn vẫn sẽ kết thúc bằng mã trạng thái 200. Giống như mã này dưới đây sẽ hoạt động:

this.route('pageNotFound', { 
    path: '/(.*)', 
    where: 'server', 
    action: function() { 
    this.response.writeHead(404); 
    this.response.end(html); 
    } 
}); 
+1

Cảm ơn! Chúng tôi sẽ phải đợi cho vấn đề đó được giải quyết. –

0
this.route('template404', { 
    path: '/*' 
} 

Sử dụng nó vào cuối Router.map của bạn, gây ra điều này bắt mỗi giá trị - nếu bạn sử dụng vào đầu mỗi con đường sẽ bị bắt này

Tất nhiên bạn có thể làm cho nó phức tạp hơn, ví dụ:

this.route('template404', { 
     path: '/posts/*' 
    } 
+0

Tôi nhận được cùng sai với giải pháp đầu tiên. –

+0

Thử đường dẫn: '*'. – Sindis

+0

Nó cũng không hoạt động. Bạn có nó hoạt động không? trên phiên bản nào của Meteor/IR? –

6

Tôi tìm thấy cách dễ dàng hơn để hiển thị trang không tìm thấy. Trong router.js

Router.configure({ 
    layoutTemplate: "layout", 
    loadingTemplate: "loading", 
    notFoundTemplate: "notFound" 
}) 

Here "notfound" có thể là bất kỳ mẫu nào nơi bạn muốn hiển thị 404 lỗi

+0

Vấn đề là tôi đang cố gắng trả lại mã lỗi cho một ứng dụng khác để tiêu thụ. Ngoài ra, không phải là mã này cho router của khách hàng thay vì một máy chủ? –

+2

không, điều này không * không * trả lại mã trạng thái 404, mã vẫn là 200. –

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