【问题标题】:Understanding Callback function in NodeJS了解 NodeJS 中的回调函数
【发布时间】:2017-12-29 19:15:00
【问题描述】:

我对 Node Js 和回调机制的概念非常陌生,我有工作代码来使用 ldapjs 基于 LDAP 验证用户,但我想知道它是如何工作的机制关于数据流和回调。

在下面的代码中我有几个疑问,有人可以帮我澄清一下

  1. cb(err === null, err, res); 是什么意思
  2. 当我使用 fake_res 执行 console.log 时,它显示为 true 为什么它是真的?
  3. 我看到一些帖子提到我们需要使用错误作为第一个回调,是这样吗?
  4. 最后我想了解为什么输出中使用的 res 和 authDN 相同
  5. 最后,回调在 NodeJS 中的一般工作原理

在问这个问题之前,我已经浏览了很多论坛,但无法与下面的代码联系起来

  1. Link 1
  2. Link 2
  3. Link 3
  4. Link 4

var express = require('express');
var util = require('util');
CircularJSON = require('circular-json');
var router = express.Router();
var ldap = require('ldapjs');
var bodyParser = require('body-parser');
var userNT;
var password;


var app = express();

function authDN(dn, password, cb, res) {
  var client = ldap.createClient({
    url: 'ldap://localhost:389'
  });
  client.bind(dn, password, function(err) {
    client.unbind();
    cb(err === null, err, res);
  });

}

function output(fake_res, err, res) {
  if (fake_res) {
    console.log('success');
    res.status(200).send('{"status":"success"}');

  } else {
    console.log('failure');
    res.status(401).send('{"status":"failure"}');
  }

}

app.use(bodyParser.json()); // support json encoded bodies
app.use(bodyParser.urlencoded({
  extended: true
})); // support encoded bodies

router.post('/login', postData);

function postData(req, res) {
  userNT = req.body.ntid;
  password = req.body.password;
  authDN(userNT, password, output, res);
};


module.exports = router;

【问题讨论】:

  • 您是否精通 LDAP 本身并在理解回调等方面遇到问题?
  • @TGW 我只是想从上面的代码中了解回调机制

标签: node.js callback asynccallback


【解决方案1】:

好的,让我们一步一步尝试:

如果你看到authDN 有第三个参数cb 这是你的回调函数。现在要追溯它,检查在 postData 函数内部调用时提供给此函数 authDN 的参数的值,此处为 cb = function output

现在输出的第一个参数是 fake_res,它是真还是假,这取决于 client.bind 的响应

如果失败,您将收到一些错误,因此它将继续为假。 问题 2 的答案来了,因为您的凭据似乎总是正确的,这 err 等于 null,因此您的 fake_res 总是正确的。

回答 问题 4 这是因为它作为参数传递,以将响应发送回您使用 router.post 进行的 API 调用

关于数字 3,使用错误优先回调只是更具可读性和更好,但不是必需的。

【讨论】:

  • 非常感谢您澄清这些事情并真正帮助了我!
  • 很高兴它有帮助,如果您对节点中的事件循环如何工作感兴趣,您可能想看看 this link 以及场景中的回调是如何出现的。
猜你喜欢
  • 1970-01-01
  • 2021-06-01
  • 1970-01-01
  • 2017-03-25
  • 1970-01-01
  • 2019-09-08
  • 2021-09-26
  • 2013-11-04
  • 1970-01-01
相关资源
最近更新 更多