当body包含特殊字符

时间:2016-10-07 07:11:31

标签: 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 });
            });
    });

当请求包含特殊字符(在本例中为瑞典字符)时,它会抛出错误。

在没有瑞典语字符的情况下发送完全相同的请求,请求成功。

我真的无法访问处理请求的服务器,这就是为什么它很难调试。 但是在发送请求之前我打印了身体,我看不到任何奇怪的东西。 以下是两种不同的身体要求:

// FAILURE

{ 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: {} }

// SUCCESS

{ 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)。 但结果仍然相同。知道如何调试这个吗?

这是请求失败时服务器返回的内容:

{
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 个答案:

答案 0 :(得分: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());
});

希望这有帮助!