我一直在尝试向我的普通node.js服务器添加路由,但我偶然发现了一个问题。
基本上,我有一个路由器类,该类具有一个对象属性,该属性存储所有路由及其各自的处理程序,还有一个称为route的方法,该方法将请求和响应作为参数,并为当前req.url和req.method调用处理程序。
问题是我收到一条错误消息,说我的处理程序不是函数。使用源代码,一切可能会更加清晰:
getHandler(method, url) {
let identifier = this.constructIdentifier(method, url);
if (!this.endPoints[identifier]) {
return new Error("Endpoint not registered!");
}
let handler = this.endPoints[identifier];
if (!handler) {
throw new Error("Handler null!");
}
console.log(handler)
return handler;
}
我已经使用typeof进行了检查,返回的处理程序确实是一个函数。
现在路线:
route(req, res) {
try {
let reqUrlString = req.url.split('?')[0];
let pathName = urlModule.parse(reqUrlString, true, false).pathname;
let method = req.method;
let handlerFunction = this.getHandler(method, pathName);
console.log("TYPE OF HANDLERFUNCTION",typeof handlerFunction);
handlerFunction(req,res);
} catch (err) {
console.log(err);
}
}
现在这是问题所在。当我在邮递员中测试路线时,一切顺利,但是当我在浏览器中尝试时,出现以下错误并输出:
HANDLERFUNCTION函数的类型
HANDLERFUNCTION对象的类型
TypeError:handlerFunction不是函数
(该功能仍会执行,并且我会在浏览器窗口中获得结果,但无法消除错误)
错误来自调用处理程序函数的行。我一直在网上寻找此错误的解决方案以及关于stackoverflow的类似问题,但似乎没有什么比我的情况好。
任何帮助