我正在编写一个koa2js应用程序,并使用hanrea / koa2-routing的修改版本(仍然可以正常工作)。
像这样使用它:
app.route('/').get(function (ctx, next){console.log(arguments); await next();})
我得到ctx, next
个参数。但是当我像这样使用它时:
app.route('/').get(async (ctx, next)=>{console.log(arguments); await next();})
或
app.route('/').get(super.someFunction(ctx, next))
参数不会被传递。
[编辑] Jim Wright的答案为我做了。事实证明,你需要暂时编码:-)来检查代码中的基本错误。
答案 0 :(得分:1)
您需要将该函数作为闭包传递:
app.route('/').get(super.someFunction)
以上假设someFunction
的定义如下:
function someFunction(ctx, next) {
// My middleware logic...
next();
}
这是因为在javascript函数中是一等公民。这实际上意味着您可以像变量一样传递它们。请看以下示例:
function addAbc(str) {
return str + "abc";
}
function doSomething(str, closure) {
// closure is actually the addAbc function before it has been called
return closure(str);
}
console.log(doSomething("The first letters of the alphabet are ", addAbc));
// Notice the lack of () after the function name. It is being passed in as a variable!
有关更多示例,请查看the Mozilla documentation on callback functions。
您的代码的问题在于它实际上正在执行该函数,并使用返回的值作为回调,如下例所示:
function myMiddleware() {
return "middleware was executed";
}
function doSomething(middleware) {
console.log(middleware);
middleware();
}
console.log("Using callback function properly:");
doSomething(myMiddleware);
console.log("Using callback function wrongly:");
doSomething(myMiddleware()); // Uncaught TypeError: middleware is not a function