为什么这个.responseToString函数说它不是一个函数?

时间:2020-07-24 00:19:14

标签: javascript node.js typescript npm

所以我有一个Typescript接口IResponse

interface IResponse {
  responseToString(): string;
}

export default IResponse;

然后我有两个实现它的类,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不是函数。这是确切的错误:

> 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

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

1 个答案:

答案 0 :(得分:0)

没关系,我已修复它。我的RestResponse被导入为路线。