2017-01-18 20 views
5

Tôi có hàm Azure được viết bằng NodeJS nơi tôi đang cố gắng chuyển hướng HTTP bằng 302. Tài liệu rất thưa thớt về các mục nhập hợp lệ trong Phản hồi. Kết quả là tôi đã tạo một đối tượng với những gì tôi cảm thấy là các mục nhập chính xác để tạo ra chuyển hướng, nhưng tất cả những gì tôi nhận được là một phản hồi XML. Ngay cả các mục như mã trạng thái được hiển thị trong XML thay vì thay đổi mã trạng thái thực.Chức năng Azure: NodeJS - Các đối tượng phản hồi HTTP dưới dạng XML thay vì phản hồi HTTP

Tôi đang làm gì sai?

Mã của tôi:

module.exports = function(context, req){ 
    var url = "https://www.google.com"; 
    context.res = { 
     status: 302, 
     headers: { 
      Location: url 
     } 
    } 
    context.done(); 
} 

Đây là câu trả lời tôi nhận được trong trình duyệt:

HTTP/1.1 200 OK 
Cache-Control: no-cache 
Pragma: no-cache 
Content-Length: 1164 
Content-Type: application/xml; charset=utf-8 
Expires: -1 
Server: Microsoft-IIS/8.0 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
Date: Wed, 18 Jan 2017 00:54:20 GMT 
Connection: close 

<ArrayOfKeyValueOfstringanyType xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays"><KeyValueOfstringanyType><Key>status</Key><Value xmlns:d3p1="http://www.w3.org/2001/XMLSchema" i:type="d3p1:int">302</Value></KeyValueOfstringanyType><KeyValueOfstringanyType><Key>headers</Key><Value i:type="ArrayOfKeyValueOfstringanyType"><KeyValueOfstringanyType><Key>Location</Key><Value xmlns:d5p1="http://www.w3.org/2001/XMLSchema" i:type="d5p1:string">https://www.google.com</Value></KeyValueOfstringanyType></Value></KeyValueOfstringanyType></ArrayOfKeyValueOfstringanyType> 

Trả lời

5

Vấn đề là bạn không xác định "cơ thể" trong phản ứng. Điều này có thể được đặt thành null, nhưng nó phải được đặt cho các hàm Azure để diễn giải nó đúng cách.

ví dụ: Cập nhật mã của bạn để:

module.exports = function(context, req){ 
    var url = "https://www.google.com"; 
    context.res = { 
     status: 302, 
     headers: { 
      Location: url 
     }, 
     body : {} 
    } 
    context.done(); 
} 

Sau đó bạn sẽ nhận được phản ứng mong muốn:

HTTP/1.1 302 Found 
Cache-Control: no-cache 
Pragma: no-cache 
Content-Length: 0 
Expires: -1 
Location: https://www.google.com 
Server: Microsoft-IIS/8.0 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
Date: Wed, 18 Jan 2017 01:10:13 GMT 
Connection: close 

Edited 2017/02/16 - Sử dụng "vô giá trị" cho cơ thể hiện ném một lỗi trên Azure . Do đó, câu trả lời đã được cập nhật để sử dụng {} thay thế.

+0

Tôi không thấy lỗi cơ thể rỗng. Nếu bạn vẫn đánh nó, bạn có thể gửi thông báo lỗi không? –

+0

Mã repo đầy đủ được tìm thấy tại đây: https://github.com/securityvoid/azure-bug/tree/master/app-function-test Xem nội dung này: https://github.com/Azure/azure -webjobs-sdk-script/issue/1208 # issuecomment-282164915 – Doug

0

Đây là lỗi với chức năng xanh lam, xem này content headers issue.

Hiện tại, giải pháp thay thế là xóa mọi nội dung có liên quan đến tiêu đề nếu nội dung phản hồi của bạn bị thiếu.

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