2017-01-18 7 views
5

У меня есть функция Azure, написанная в NodeJS, где я пытаюсь вызвать HTTP-переадресацию с 302. Документация очень разрежена в отношении допустимых записей в ответ. В результате я создал объект с тем, что, по моему мнению, должен быть правильным, чтобы генерировать перенаправление, но все, что я получаю, - это ответ XML. Даже элементы, такие как код состояния, отображаются в XML, а не изменяют реальный код состояния.Azure Функции: NodeJS - HTTP-ответ отображается как XML, а не HTTP-ответ

Что я делаю неправильно?

Мой код:

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

Это ответ я получаю в браузере:

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> 

ответ

5

Проблема заключается в том, что вы не определяя «тело» в ответ. Это может быть установлено в значение null, но для функций Azure должно быть установлено его правильное толкование.

например. Обновите код:

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

Вы тогда получите желаемый ответ:

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 

Отредактировано 2/16/2017 - Использование «нуль» для тела в настоящее время выдает ошибку на Azure , В результате ответ был обновлен, чтобы использовать {} вместо этого.

+0

Я не вижу ошибку нулевого тела. Если вы все еще нажимаете на него, можете ли вы опубликовать сообщение об ошибке? –

+0

код Полный репо здесь: https://github.com/securityvoid/azure-bug/tree/master/app-function-test Смотрите это так: https://github.com/Azure/azure -webjobs-СДК-скрипт/вопросы/1208 # issuecomment-282164915 – Doug

0

Это ошибка с лазурными функциями, см. Это content headers issue.

В настоящее время обходным путем является удаление любых заголовков, связанных с контентом, если тело вашего ответа равно null.