2013-02-28 35 views
30

Tôi đang sử dụng Windows Azure Websites để lưu trữ ứng dụng node.js. Cho đến nay mọi thứ đều tuyệt vời ngoại trừ các lỗi tùy chỉnh của tôi. Trong ứng dụng nút của tôi, tôi có một trình xử lý lỗi để hiển thị trang lỗi 404 tùy chỉnh và tùy chỉnh 500 chỉ tốt trên máy cục bộ của tôi. Tuy nhiên, ngay sau khi tôi xuất bản lên Azure, nó ghi đè phản hồi khi tôi đặt mã trạng thái thành bất kỳ điều gì ngoại trừ 200.Trang web Windows Azure ghi đè các trang lỗi 404 và 500 của tôi trong ứng dụng node.js của tôi

Nếu tôi không vượt qua trạng thái 500 hoặc 404Chuyển đến phản hồi thì điều này không xảy ra, nhưng tôi muốn các mã trạng thái để làm cho nó vào trình duyệt. Tại địa phương tôi nhận được trang lỗi tùy chỉnh của tôi tốt:

Tuy nhiên, trên các trang web xanh nó chỉ trả về một dòng văn bản:

Trang không thể được hiển thị bởi vì một lỗi máy chủ nội bộ có xảy ra.

Tôi đã cố gắng tạo web.config của riêng mình để ghi đè lên mặc định với lỗi tùy chỉnh bị vô hiệu hóa nhưng điều đó dường như không có tác dụng. Dưới đây là web.config của tôi:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.web> 
     <customErrors mode="off" /> 
    </system.web> 
    <system.webServer> 
     <handlers> 
      <add name="iisnode" path="app.js" verb="*" modules="iisnode"/> 
     </handlers> 
     <rewrite> 
      <rules> 
       <rule name="StaticContent"> 
        <action type="Rewrite" url="public{REQUEST_URI}"/> 
       </rule> 
       <rule name="DynamicContent"> 
        <conditions> 
         <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/> 
        </conditions> 
        <action type="Rewrite" url="app.js"/> 
       </rule> 
      </rules> 
     </rewrite> 
     <iisnode 
      debuggingEnabled="true" 
      devErrorsEnabled="true" 
      debuggerPathSegment="debug" 
      nodeProcessCommandLine="&quot;%programfiles(x86)%\nodejs\node.exe&quot;" 
      logDirectory="..\..\LogFiles\nodejs" 
      watchedFiles="*.js;iisnode.yml;node_modules\*;views\*.jade;views\*.ejb;routes\*.js" /> 
    </system.webServer> 
</configuration> 

Tôi không chắc chắn nếu iisnode (phần mở rộng cho IIS rằng tuyến đường yêu cầu Node.js) chịu trách nhiệm cho trọng trang lỗi của tôi hoặc nếu iis tự chịu trách nhiệm. Bất kỳ đề xuất?

+1

này không làm việc cho tôi, và lý do rốt cuộc là tôi đã có một ' 'phần trong web.config của tôi. Xóa nó đã sửa nó cho tôi: http://stackoverflow.com/questions/22549579/iis-returns-500-when-node-app-returns-a-4xx –

+0

Cảm ơn thông tin @MattGreer. Bạn đã tự thêm phần tử '' hay là mới trong web.config của Azure Websites mặc định? Nếu đó là một phần của web.config mặc định thì tôi muốn cập nhật câu trả lời này để phản ánh chỉnh sửa của bạn. – Chev

+1

Tôi đã tự thêm nó vào để IIS phục vụ SVG (mà nó không làm theo mặc định) –

Trả lời

81

Không sao, tôi đã tìm thấy sự cố. Nếu bất cứ ai khác là có cùng một vấn đề đơn giản là thêm dòng sau dưới <system.webServer> trong web.config:

<httpErrors existingResponse="PassThrough" /> 
1

Đã có một vấn đề tương tự với dự án MVC tổ chức trong Windows Azure. Trên máy cục bộ được lưu trữ trong IIS đã hoạt động tốt nhưng trên máy trực tiếp, tôi nhận được lỗi sau "Tài nguyên bạn đang tìm kiếm đã bị xóa, tên của nó đã thay đổi hoặc tạm thời không khả dụng."

Thêm này để cấu hình web dưới system.webServer lưu ngày của tôi

web.config của tôi trông như thế này

<system.web> 
    *** 
    <customErrors mode="RemoteOnly" defaultRedirect="~/Error/PageNotFound"> 
     <error statusCode="404" redirect="~/Error/PageNotFound" /> 
     <error statusCode="500" redirect="~/Error/ServerError"/> 
    </customErrors> 
    </system.web> 
*** 
<system.webServer> 
    <httpErrors existingResponse="PassThrough" /> 
</system.webServer> 
Các vấn đề liên quan