获取请求JSON类型作为缓冲区

时间:2015-08-13 13:26:11

标签: node.js restify

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

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

1 个答案:

答案 0 :(得分:4)

看起来Restify的身体解析器中间件并不像Application/Json那样内容类型,它只接受application/json(哪个AFAIK是一个bug,因为mime-types应该被处理不区分大小写;提交问题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()之前,您必须包含该内容。