提取主体未显示在Hapi的请求有效载荷中

时间:2018-07-25 12:51:00

标签: javascript node.js hapijs

我有一个运行Hapi的Nodejs API服务器。为了进行测试,我有一个带有一些Javascript的简单HTML页面,该页面使用fetch命中API来获取某些数据。该页面上的Javascript如下所示:

 fetch("http://localhost:3000/lov", {
        method: "POST", 
        mode: "cors",
        headers: {"Content-Type": "application/json"},
        body: {P_LOV_NAME: "RTSBLANK"}
}).then(function(res) {
    return res.json();
}).then(displayData);

function displayData(data) {
    let elem = document.getElementById("screen");
    elem.innerHTML = JSON.stringify(data, null, 2);
    console.log(data);
}

问题在于Hapi端点似乎没有上述请求的主体。代码如下:

“使用严格”;

exports.plugin = {
    name: "LOV",
    version: "1.0.0",
    register: async function (server, options) {
        server.route({
            config: {
                cors: {
                    origin: ['*'],
                    additionalHeaders: ['cache-control', 'x-requested-with']
                }
            },
            method: "POST",
            path: "/lov",
            handler: function(request, h) {
                return getLOV(request, h, server);
            }
        });
    }
};

function getLOV(request, h, server) {
    console.log("Get LOV Request: ", request.payload);
    let res = server.methods.response();
    res.error = false;
    res.msg = "Retrieved LOV.";

    if (request.payload && request.payload.P_LOV_NAME == "RTSBLANK") {
        res.data = server.methods.fake().lovTestUser;
    } else {
        res.data = server.methods.fake().lovBlank;
    }

    return res;
}

在getLOV()函数中,request.payload始终为null。我看过了请求对象,它似乎没有在任何地方的身体对象。我在这里有点不知所措,因为这似乎并不复杂。我是否缺少明显而愚蠢的东西?

1 个答案:

答案 0 :(得分:0)

的确是我忽略了然后想到了的愚蠢之举。请求的正文不能是JSON对象。您必须首先在其上使用JSON.stringify()。