获取正文未显示在 Hapi 的请求有效负载中

fetch body not showing up in the request payload in Hapi

我有一个 Nodejs API 服务器 运行 Hapi。为了测试,我有一个简单的 HTML 页面,其中有一些 Javascript 使用 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 端点似乎没有上面的请求正文。代码如下所示:

"use strict";

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 始终为空。我查看了请求对象,它上面似乎没有正文对象。我有点不知所措,因为这看起来不像是那么复杂的代码。我是不是遗漏了一些明显而愚蠢的东西?

确实,我忽略了一些愚蠢的事情,然后想得太多了。请求的正文不能是 JSON 对象。您必须先在其上使用 JSON.stringify()。