【问题标题】:Getting Request JSON type as buffer获取请求 JSON 类型作为缓冲区
【发布时间】:2015-08-13 22:25:18
【问题描述】:

我有一个处理 JSON 的函数。它由路由处理程序调用。该函数不是获取 JSON 字符串,而是获取 this-

{"type": "Buffer", "data": [123,122,22,....]}

因此,我无法解析 JSON。是什么导致了这个问题?

我正在传递 JSON,例如 -

{"id": "123", "username": "abc",...}

我的代码是 -

server.post('/pages', restify.jsonBodyParser(),createPage);
function createPage(req, res, next)
{
   myfunction(req,res);

   next();
}

function myfunction(req,res){
   console.log(req);
}

这是请求头 -

{"authorization":"Basic xxxxxxx","accept":"application/json, application/xml, text/json, text/x-json, text/javascript, text/xml","user-agent":"RestSharp/105.0.1.0","content-type":"Application/Json", "host":"remoteserver.com:xxx","cookie":"sessionid=36yTgWtzpSR4VrvRikTEzfu8wBcPLWTQARtLgT63","content-length":"4246","accept-encoding":"gzip, deflate"}

【问题讨论】:

    标签: node.js restify


    【解决方案1】:

    看起来 Restify 的正文解析器中间件不喜欢 Application/Json 作为内容类型,它只接受 application/json(AFAIK 是一个错误,因为 mime 类型应该不区分大小写;提交的问题 here) .

    如果无法更改客户端,可以使用 Restify 中间件,将标头小写:

    server.use(function(req, res, next) {
      if (typeof req.headers['content-type'] === 'string') {
        req.headers['content-type'] = req.headers['content-type'].toLowerCase();
      }
      next();
    });
    

    您必须在使用 restify.jsonBodyParser() 之前将其包含在内。

    【讨论】:

    • 我不确定您的建议是否能解决我的问题,因为我将“myfunction”更改为处理字符串类型并仅传递 req.body 而不是 req 对象。但它确实解决了必须使用 JSON.parse 正文的问题。无论如何,我将其标记为正确答案,因为我认为这是罪魁祸首。但我会进行测试以确认是否有类似问题的其他人可以确定。
    • 好的,我刚刚将我的功能改回原来的功能并测试了您的解决方案。是的,你是对的。这就是我得到那个奇怪的数据结构的原因。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 2017-07-25
    • 2021-02-23
    • 2021-12-22
    • 1970-01-01
    相关资源
    最近更新 更多