繁体   English   中英

为什么 this.responseToString function 说它不是 function?

[英]Why is this .responseToString function saying that it isn't a function?

所以我有一个 Typescript 接口IResponse

interface IResponse {
  responseToString(): string;
}

export default IResponse;

然后我有 2 个类实现它, RestResponseHTMLResponse

import IResponse from "./IResponse";

class RestResponse implements IResponse {
  private response: string;
  responseToString(): string {
    return this.response;
  }

  constructor(response: string) {
    this.response = response;
  }
}
export default RestResponse;
import IResponse from "./IResponse";

class HTMLResponse implements IResponse {
  private response: string;
  constructor(response: string) {
    this.response = response;
  }

  responseToString(): string {
    return this.response;
  }
}
export default HTMLResponse;

然后我在这里使用这些类:

import http from "http";
import url from "url";
import Route from "./Route";
import HTTPRequest from "./HTTPRequest";
import IResponse from "./IResponse";

class HextecCreator {
  static createApp = (routes: Array<Route>) => {
    return {
      getRoutes: () => {
        return routes;
      },
      run: (port: number) => {
        http
          .createServer(function (req, res) {
            console.log(routes);
            let data: any = [];
            let correctRoute: Route[];
            req
              .on("data", (chunk) => {
                data.push(chunk);
              })
              .on("end", () => {
                console.log(req.url);
                data = Buffer.concat(data).toString();
                correctRoute = routes.filter(
                  (route) =>
                    route.getUrl() ==
                    url.parse(req.url as string, true).pathname
                );
                if (typeof correctRoute[0] != "object") {
                  res.write("Route not found");
                  res.end();
                } else {
                  console.log(correctRoute);
                  let responseObj: IResponse = correctRoute[0].getHandlerFunc()(
                    new HTTPRequest(
                      req.method,
                      req.url,
                      url.parse(req.url as string, true).query,
                      data
                    )
                  );
                  res.write(responseObj.responseToString());
                  res.end();
                }
              });
          })
          .listen(port);
      },
    };
  };
}

export default HextecCreator;

但是,当我尝试使用我的库时,在这段代码中:

const HextecCreator = require("hextec").HextecCreator;
const Route = require("hextec").Route;
const RestResponse = require("hextec").Route;
const rootHandler = () => {
  return new RestResponse("Welcome to Hextec");
};

const app = HextecCreator.createApp([new Route("/", rootHandler)]);

app.run(8080);

错误显示为responseToString不是 function。 这是确切的错误:

> demo@1.0.0 start /home/rohand/demo
> node App.js

[ Route { url: '/', handlerFunc: [Function: rootHandler] } ]
/
[ Route { url: '/', handlerFunc: [Function: rootHandler] } ]
/home/rohand/demo/node_modules/hextec/dist/HextecCreator.js:38
                        res.write(responseObj.responseToString());
                                              ^

TypeError: responseObj.responseToString is not a function
    at IncomingMessage.req.on.on (/home/rohand/demo/node_modules/hextec/dist/HextecCreator.js:38:47)
    at IncomingMessage.emit (events.js:203:15)
    at endReadableNT (_stream_readable.js:1145:12)
    at process._tickCallback (internal/process/next_tick.js:63:19)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! demo@1.0.0 start: `node App.js`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the demo@1.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/rohand/.npm/_logs/2020-07-24T00_16_59_072Z-debug.log

为什么会这样? 我知道处理程序 function 应该返回一个responseToString function,因为 RestResponse class 实现了IResponse

没关系,我已经修好了。 我的 RestResponse 作为路由导入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM