当前位置: 首页 > 知识库问答 >
问题:

解释箭头运算符系列[重复]

宋瀚海
2023-03-14

我有一个具有以下代码的文件:

const logger = (options) => (req, res, next) => {
  if (typeof options === 'object'
      && options !== null
      && options.enable) {
        console.log(
          'Status Code:', res.statusCode,
          'URL:', req.originalUrl,
        )
  }
  next()
}

module.exports = logger

它在另一个。js文件中也是这样使用的:

const express = require('express')
const loggerMiddleware = require('./middleware-logger')
const app = express()

app.use(loggerMiddleware({
        enable: true,
}))

app.listen(
    1337,
    () => console.log('Web Server listening on 1337'),
)

有人能解释第一行中的=>系列发生了什么吗?我理解normal(req,res,next)=>{}的意思如下:

共有1个答案

钦楚青
2023-03-14

您所显示的代码是以下代码的简写:

const logger = function(options) {
  return function(req, res, next) {
    if (typeof options === 'object' &&
      options !== null &&
      options.enable) {
      console.log(
        'Status Code:', res.statusCode,
        'URL:', req.originalUrl,
      )
    }
    next()
  }
}

如果调用loggermiddleware({enable:true,}),它将返回一个新函数函数(req,res,next){...},该函数在options参数上创建闭包。

这允许返回的函数(在本例中是中间件)在每个请求上访问传递的option对象,而不需要污染全局范围。

app.get('/with-logging', loggerMiddleware({
  enable: true,
}), function(res, res) {})


app.get('/without-logging', loggerMiddleware({
  enable: false,
}), function(res, res) {})
 类似资料:
  • 更新/答案:原来IntelliJ12支持Java 8,后者支持lambda,并且正在“折叠”谓词并将其显示为lambda。下面是“未折叠”代码。

  • 问题内容: 在浏览一些代码时,我遇到了箭头运算符,它究竟是做什么的?我以为Java没有箭头运算符。 详细信息:Java 6,Apache Commons Collection,IntelliJ 12 更新/答案:事实证明IntelliJ 12支持Java 8,后者支持lambda,并且正在“折叠”谓词并将其显示为lambda。下面是“展开”代码。 问题答案: 这是将在Java 8中引入的新lamb

  • C++ 重载运算符和重载函数 C++ 语言支持各种关系运算符( < 、 > 、 <= 、 >= 、 == 等等),它们可用于比较 C++ 内置的数据类型。 您可以重载任何一个关系运算符,重载后的关系运算符可用于比较类的对象。 下面的实例演示了如何重载 < 运算符,类似地,您也可以尝试重载其他的关系运算符。 #include <iostream> using namespace std; cl

  • 关系运算符(relational operators)也可以称为“比较运算符”,用于用来比较判断两个变量或常量的大小。 关系运算符是二元运算符,运算结果是 boolean 型。当运算符对应的关系成立时,运算结果是 true,否则是 false。 关系表达式是由关系运算符连接起来的表达式。关系运算符中“关系”二字的含义是指一个数据与另一个数据之间的关系,这种关系只有成立与不成立两种可能情况,可以用逻