multer中cb的null参数是什么?

时间:2019-04-30 21:16:00

标签: javascript node.js express multer

在下面的代码中,从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 }

3 个答案:

答案 0 :(得分: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的模块使用并检查第一个参数,以进行适当的错误处理。

例如,如果错误是作为 second 参数传递的,则懒惰的程序员很容易简单地忽略它,并定义回调以使其仅查看第一个参数。 / p>

答案 1 :(得分:1)

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

Here's my code: var soap = require('soap'); var url = 'your WSDL url'; var auth = "Basic " + new Buffer("your username" + ":" + "your password").toString("base64"); soap.createClient(url, { wsdl_headers: {Authorization: auth} }, function(err, client) { client.setSecurity(new soap.BasicAuthSecurity('your username','your password')); client.yourfunction(args, function (err, result) { if (err) { console.log('Error: ', err); } else { console.log('Result: ', result); } }); 以外的其他选项将是null某种类型的实例。

答案 2 :(得分:1)

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

node.js异步回调约定适用于带有两个参数的回调,如果这是一个声明的函数,则该参数看起来像这样:

null

第一个参数是错误(如果没有错误,则为function someCallbackFunction(err, value) { if (err) { // process err here } else { // no error, process value here } } ,如果有错误,通常是null对象的实例)。第二个是值(如果没有错误)。

因此,如果没有错误,则将Error作为第一个参数传递,第二个参数将包含您的值。

仅供参考,此回调样式有node.js documentation