#javascript #json #node.js #http
#javascript #json #node.js #http
Вопрос:
Я использую node.js и библиотека под названием requestify. Код выглядит следующим образом:
console.log('body');
console.log(body);
return new Promise(function (f, r) {
requestify.request(myurl, {
method: 'POST',
body : body,
headers : {
"Content-Type" : "application/json; charset=utf-8"
}
})
.then(function (response) {
f({messge : "Success"});
}, function (err) {
console.log(err);
err.code == 405 ? r(err.body) : r({ success: false, message: err });
});
});
Когда запрос содержит специальные символы (в данном случае шведские символы), он выдает ошибку.
Отправив точно такой же запрос без шведских символов, запрос выполняется успешно.
На самом деле у меня нет доступа к серверу, который обрабатывает запрос, поэтому его сложно отлаживать. Но я печатаю тело перед отправкой запроса и не вижу в нем никаких странных вещей. Вот 2 разных запроса тела:
// СБОЙ
{ eventType: 'createUser',
eventId: '1e2ca3b4-0f6b-4ed9-ae79-2e112c8d693c',
version: '0.1',
date: 2016-10-07T06:42:26.209Z,
attributes:
{ userName: 'akeandersson@gmail.se',
email: 'akeandersson@gmail.se',
firstName: 'Åke',
lastName: 'Andresson',
phoneNumber: '1',
identifier: '198509120328',
assignment: 'se.me',
role: [ 'se.me.role.user' ] },
metadata: {} }
// УСПЕХ
{ eventType: 'createUser',
eventId: '1e2ca3b4-0f6b-4ed9-ae79-2e112c8d693c',
version: '0.1',
date: 2016-10-07T06:44:09.857Z,
attributes:
{ userName: 'akeandersson212@gmail.se',
email: 'akeandersson212@gmail.se',
firstName: 'Ake',
lastName: 'Andresson',
phoneNumber: '9',
identifier: '196606095823',
assignment: 'se.me',
role: [ 'se.me.role.user' ] },
metadata: {} }
Я также помещаю «; charset= utf-8» в тип содержимого заголовка (по умолчанию это уже utf-8 согласно документации requestify).
Но результат все тот же. Есть идеи, как я мог бы это отладить?
Это то, что сервер возвращает при сбое запроса:
{
code: 400,
headers:
{ connection: 'close',
'content-type': 'text/plain',
'content-length': '244',
date: 'Fri, 07 Oct 2016 06:42:27 GMT' },
body: 'Unexpected end-of-input: expected close marker for OBJECT (from [Source: ServletInputStreamImpl@75eb88e4; line: 1, column: 0])n at [Source: ServletInputStreamImpl@75eb88e4; line: 1, column: 767]' }
Комментарии:
1. Какая версия
requestify
у вас есть?2. «запрос»: «^ 0.1.17»
3. Ни один из этих ответов не является допустимым JSON, поэтому я удивлен, что ни один из них не сработал.
4. Вы можете попробовать загрузить данные, используя другую кодировку (что, вероятно, было бы проще сделать, используя что-то вроде cURL), чтобы узнать, есть ли у сервера проблемы, в частности, с UTF-8.
Ответ №1:
Я думаю, вам нужно загрузить свой requestify
модуль в самую последнюю версию. Я использую version 0.2.3
, который не выдает мне никаких ошибок.
Предполагая, что вы столкнулись с ошибкой при попытке прочитать символ norwegian
(или) swedish
, я попытался прочитать веб-сайт, на котором есть norwegian
символы, и с помощью приведенного ниже кода я могу вывести его на консоль без каких-либо ошибок. То же самое и со swedish
страницей. Я использую 0.2.3
версию (которая является самой последней версией). Я тоже не установил кодировку UTF-8
.
var requestify = require('requestify');
requestify.get('http://www.norwegian4people.com/lesson.php?id=41').then(function(response) {
// Get the response body
console.log(response.getBody());
});
Надеюсь, это поможет!