multer中cb的null参数是什么?

问题描述 投票:0回答:3

在下面的代码中,从multer API中,两个cb函数将null作为其第一个参数。除了null之外,null和其他值可以使用的含义是什么?

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, '/tmp/my-uploads')
  },
  filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + Date.now())
  }
})

var upload = multer({ storage: storage }
javascript node.js express multer
3个回答
1
投票

采用回调的函数通常会格式化回调,以便提供给回调的第一个参数是错误(如果遇到任何错误),而第二个参数是成功检索的值(如果没有遇到错误)。这正是这里发生的事情。如果destinationfilename涉及可能引发错误的内容,那么传递给cb的第一个参数可能是错误,例如:

destination: function (req, file, cb) {
  if (!authorized) {
    cb(new Error('You are not authorized to do this!'));
    return;
  }
  cb(null, '/tmp/my-uploads')
}

原因是,如果第一个参数是错误,则通过cb的模块被激励使用并检查第一个参数,允许正确的错误处理。

例如,如果错误作为第二个参数传递,那么懒惰的程序员很容易忽略它,并定义回调,使它只查看第一个参数。


1
投票

这是Node.JS早期在其生态系统中开发的核心和库中建立的错误优先回调模式。它仍然是一种常见的模式,但大多数都包含在promises或async / await之类的东西中。以下是Node.JS docs https://nodejs.org/api/errors.html#errors_error_first_callbacks的相关部分。

除了null之外的其他选项将是某种类型的Error的实例。


1
投票

null表示没有错误,您正在调用成功完成的回调和结果值。

node.js异步回调约定用于回调,如果它是声明的函数,它将采用两个如下所示的参数:

function someCallbackFunction(err, value) {
    if (err) {
        // process err here
    } else {
        // no error, process value here
    }
}

第一个参数是错误(如果没有错误,则为null,如果有错误,通常是Error对象的实例)。第二个是值(如果没有错误)。

所以,当没有错误时,你将null作为第一个参数传递,第二个参数将包含你的值。

仅供参考,这种回调风格有node.js documentation

© www.soinside.com 2019 - 2024. All rights reserved.