获取正文未显示在 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()。
我有一个 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()。