解决GET请求正文

时间:2017-06-15 18:53:21

标签: javascript node.js restify

我正在使用restify构建一个rest api,我需要允许post body获取请求。我正在使用bodyparser,但它只提供一个字符串。我希望它像普通的帖子端点一样成为对象。

如何将其转换为对象?这是我的代码:

const server = restify.createServer();
server.use(restify.queryParser());
server.use(restify.bodyParser());
server.get('/endpoint', function (req, res, next) {
    console.log(typeof req.body);
    console.log(req.body && req.body.asd);
    res.send(200);
});

1 个答案:

答案 0 :(得分:3)

对于正在使用 GET 方法的请求体,restify中的bodyParser不会默认解析有效的JSON(我假设您正在使用)。您必须在bodyParser初始化时提供配置对象,并将 requestBodyOnGet 键设置为true:

server.use(restify.bodyParser({
    requestBodyOnGet: true
}));

为确保请求正文为JSON,我还建议您检查端点处理程序中的 content-type ; e.g:

const server = restify.createServer();
server.use(restify.queryParser());
server.use(restify.bodyParser({
    requestBodyOnGet: true
}));
server.get('/endpoint', function (req, res, next) {
    // Ensures that the body of the request is of content-type JSON.
    if (!req.is('json')) {
        return next(new restify.errors.UnsupportedMediaTypeError('content-type: application/json required'));
    }
    console.log(typeof req.body);
    console.log(req.body && req.body.asd);
    res.send(200);
});