【问题标题】:How return is getting parameters in this function [duplicate]return 如何在此函数中获取参数 [重复]
【发布时间】:2019-10-23 17:13:24
【问题描述】:

所以我在网上寻找了解如何将附加参数传递给中间件时,我偶然发现了以下问题:Creating a expressjs middleware that accepts parameters

这里的正确答案已经回答了这个

function HasRole(role) {
  return function(req, res, next) {
    if (role !== req.user.role) res.redirect(...);
    else next();
  }
}

对于以下路线 `

app.get('/hasToBeAdmin', HasRole('Admin'), function(req,res){

})

另外,我知道 express 将 req, res, next 传递给中间件。

现在,我试图理解的是,当我们只将HasRole('Admin') 传递给函数时,我们的返回函数如何具有不同的参数以及它如何接收这些参数。用技术术语来说,这就是所谓的,所以我可能可以在谷歌上找到更多关于它的信息。

更新:考虑这个无节点示例,我有以下功能

function foo(a,b,c) {
  return function (d, e, f) {
  }
}

我将如何通过d, e, f 在上述函数中返回?

【问题讨论】:

  • 它接收参数 when 它被 调用它的人调用...
  • 函数foo是返回另一个函数的函数(以d、e和f为参数的函数)。所以, foo 的返回值又可以作为普通函数使用了
  • foo(1,2,3)(4,5,6)
  • 因为中间件,你会在中间件中找到所有的东西,比如req,body,所有从客户端传递过来的东西。

标签: javascript node.js


【解决方案1】:

HasRole('Admin') 返回一个函数。

该函数立即作为第二个参数传递给app.get()(另一个函数作为第三个参数传递)。

这些函数在被调用时传递参数

调用它们的代码没有显示在你的问题中(因为你没有写app.get(),它是 Express 的一部分,所以你需要深入研究 Express 的源代码才能看到它)。


JS 中的函数是第一类对象。它们可以像任何其他值一样被传递。

function give_me_a_function () {
    return function (a, b, c) {
        console.log({ a, b, c });
    }
}

function call_a_function_with_args(a_function) {
    a_function(1, 2, 3);
}

const x = give_me_a_function();
call_a_function_with_args(x);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-31
    • 2019-01-21
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 2014-01-12
    • 2022-10-01
    相关资源
    最近更新 更多