我现在正在学习node,但是对于错误参数(err parameter)感到困惑。 我认为它应该是回调函数的第一个参数,但是我在很多回调函数中并没有看到它。有人能给我解释一下吗?谢谢!
错误参数通常用于异步代码。 Node.js 错误处理
大多数接受回调函数的异步方法都会接受一个 Error 对象作为该函数的第一个参数。如果该第一个参数不为 null 而且是 Error 的实例,则发生了应该被处理的错误。
app.get()
发送 get 请求并返回像 404 这样的错误。
你可以在 app.get()
中执行类似这样的操作 res.status(404).render()
错误处理函数有四个参数,而不是三个:(err, req, res, next)
一些代码将 err 作为第一个参数的原因是,一些代码如 fs.readFile
是编程来检查是否有错误并处理它。 API 的作者专门编写了代码来检查第一个参数是否为错误并处理它。 这就是为什么对于某些方法可用,对于其他方法则不可用。
有许多不同种类的函数,特别是回调函数。在Node.js中,回调函数的标准形式如下:
function(err, arg1, arg2, ...)
当relevant时,arg1等参数才存在,但err参数总是第一个。这与许多历史JavaScript代码的相反,其中错误是最后一个参数。
即使没有错误,Node.js强制将错误作为第一个参数也使忽略错误更加困难,你很少会忘记声明该参数,并且使它们的位置可预测。
现在,这仅适用于通用回调的情况。也就是说,有时调用函数将在将来某个时间触发单个回调。您将看到它们像这样使用:
doStuff(function(err, successValue) { ... });
还有一种由jQuery流行的风格,其中根据操作结果将触发一个或多个回调函数:
doStuff({
success: function(successValue) { ... },
error: function(err) { ... },
timeout: function() { ... }
});
首先:回调函数只是一个函数。不同的回调函数有不同的用途。
通常,执行异步操作并应“返回”值的函数会传递一个回调函数,该函数将使用(至少)两个参数:第一个用于传递错误(如果有),第二个(及其后续)用于传递应返回给调用者的值。
您注意到 net.createServer()
也会接受一个回调函数,但该函数只有一个参数。
这是因为,在这种情况下,回调函数不用于传递错误和/或值。相反,它是在新连接建立到服务器时调用的函数。
这实际上是一种快捷方式。这段代码:
var server = net.createServer(function(connection) {
...
});
这段代码的缩写是:
var server = net.createServer();
server.on('connection', function(connection) {
...
});
callback(err, result)
被节点库和试图保持一致风格的库所使用。然而,库作者没有义务遵循它。因此,如果你正在查看用户代码,你可能会发现它被使用或未被使用。 - barry-johnsonvar net = require('net'); var server = net.createServer(function(connection) { connection.on('end', function() { console.log('客户端已断开连接'); }); });
- diodeBucks