![](/img/trans.png)
[英]How can I get the raw HTTP message body using the request library in Node.js?
[英]How do I parse the body of a request using the http module in node.js?
我正在嘗試在不使用任何 Express 代碼的情況下為 Node 編寫框架。 我希望能夠使用 http 模塊從 HTTP 請求中獲取主體,但我嘗試的任何方法似乎都不起作用。 這是我目前的代碼:
import http from "http";
import url from "url";
import Route from "./Route";
import HTTPRequest from "./HTTPRequest";
class HextecCreator {
static createApp = (routes: Array<Route>) => {
return {
getRoutes: () => {
return routes;
},
run: (port: number) => {
http
.createServer(function (req, res) {
let data: any = [];
req
.on("data", (chunk) => data.push(chunk))
.on("end", () => {
data = Buffer.concat(data).toString();
});
var correctRoute;
for (var route of routes) {
if (route.getUrl() === req.url) {
correctRoute = route;
break;
} else {
correctRoute = "Route not found";
}
}
if (typeof correctRoute != "object") {
res.write("Route not found");
res.end();
} else {
res.write(
correctRoute
.getHandlerFunc()(
new HTTPRequest(
req.method,
req.url,
url.parse(req.url as string, true).query,
data
)
)
.getResponse()
);
res.end();
}
})
.listen(port);
},
};
};
}
export default HextecCreator;
這應該可以,但是當我使用 postman 實際獲取請求的正文時,它是空的。 我怎樣才能解決這個問題?
在您的整個 function 完成后觸發end
事件。 要對整個 HTTP 請求主體執行某些操作,您需要從end
處理程序中觸發此功能。
這意味着您的邏輯的 rest 需要存在於end
事件處理程序中,或者您需要調用“完成其余部分”的 function,但仍來自該end
事件。
我還從頭開始編寫了一個框架,這是我基於 async/await 的版本:
https://github.com/curveball/core/blob/master/src/node/request.ts#L36
請注意,這仍然代表將整個 stream 轉換為外部 package 的緩沖區。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.