【问题标题】:Why is this .responseToString function saying that it isn't a function?为什么这个 .responseToString 函数说它不是函数?
【发布时间】:2020-07-24 10:13:20
【问题描述】:

所以我有一个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 不是函数。这是确切的错误:

> 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

【问题讨论】:

    标签: javascript node.js typescript npm


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-08
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 2021-11-13
      相关资源
      最近更新 更多