簡體   English   中英

如何使用 node.js 中的 http 模塊解析請求正文?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM