所以我有一个Typescript接口IResponse
:
interface IResponse {
responseToString(): string;
}
export default IResponse;
然后我有两个实现它的类,RestResponse
和HTMLResponse
:
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
。
答案 0 :(得分:0)
没关系,我已修复它。我的RestResponse被导入为路线。