JavaScript JSON对象解析不正确

JavaScript JSON对象解析不正确,javascript,node.js,amazon-dynamodb,Javascript,Node.js,Amazon Dynamodb,各位, 我一直在为这个问题绞尽脑汁。本质上,我有一个表单,它提交一个字符串值以通过DynamoDB RangeKey进行搜索 如果表单包含“newy”,则函数似乎中断。如果我坚持“新的%20Y”,事情会按预期进行。如果使用空格,我会看到以下错误: error: socket hang up 在这段代码的某个地方,它不能正确地传递空格。令人困惑的是,“有些”空间起作用,有些不起作用 exports.nameSearch = function (req, res) { getJSON = fu

各位, 我一直在为这个问题绞尽脑汁。本质上,我有一个表单,它提交一个字符串值以通过DynamoDB RangeKey进行搜索

如果表单包含“newy”,则函数似乎中断。如果我坚持“新的%20Y”,事情会按预期进行。如果使用空格,我会看到以下错误:

error: socket hang up
在这段代码的某个地方,它不能正确地传递空格。令人困惑的是,“有些”空间起作用,有些不起作用

exports.nameSearch = function (req, res) {
  getJSON = function(options, onResult){
    //console.log("rest::getJSON");
    var prot = options.port == 8443 ? https : http;
    var req = prot.request(options, function(res)
    {
        var output = '';
        console.log(options.host + ':' + res.statusCode);
        res.setEncoding('utf8');

        res.on('data', function (chunk) {
            output += chunk;
        });

        res.on('end', function() {
            var obj = JSON.parse(output);
            onResult(res.statusCode, obj);
        });
    });
    req.on('error', function(err) {
        res.send('error: ' + err.message);
    });
    req.end();
};

if (!req.session.username) {
    res.redirect('/login');
} else {
    options = {
        host: 'api.me.com',
        port: 8443,
        path: '/usr/name/'+req.body.name,
        method: 'GET',
        rejectUnauthorized: false,
        requestCert: true,
        agent: false,
        headers: {
            'Content-Type': 'application/json'
            }
    };//options

    getJSON(options,function(statusCode, result) {
        console.log("onResult: (" + statusCode + ")" + JSON.stringify(result));

        // Check if we found anything
        status = JSON.stringify(result.Count)
        if (status == 'undefined') {
            console.log ('Nothing Found by the name,', req.body.name)
            var count = '0'
            res.render('user/nameSearch', { title: 'title', count: count, req: req });
        } else {
            results = JSON.stringify(result)
            console.log ("results 1 ok , ", results)
            results = JSON.parse(results)
            console.log ("results 2 ok , ", results)
            res.render('base/nameSearch', { title: 'title', baseResults: results, req: req })
        }

    });// JSON
} // else
})

如果表单包含“newy”,则函数似乎中断。如果我坚持“新的%20Y”,事情会按预期进行


这意味着您正在某个地方对输入进行url解码,因此您需要弄清楚是哪个中间件执行此操作。可能是内置的
unescape
功能。但就目前情况而言,您的问题过于笼统,我无法缩小URL编码输入的范围。

我是否应该尝试对req.body.name进行uri编码?@Cmag首先,我会确保您了解您正在使用的所有函数的输入和输出。但是,作为一个黑客,我相信预编码是可行的。我上传了一个更新的问题:根据我目前所看到的,我发布了一个不完整的答案。但是请缩小你的代码范围。这对我来说太多了,无法通过阅读来调试。看见