我是 Node Js和回调机制概念的新手,我有使用ldapjs
基于LDAP验证用户的工作代码,但我想知道它的机制如何处理数据流和回调。
在下面的代码中我几乎没有疑问,有人可以帮我澄清
cb(err === null, err, res);
true
为什么是真的?在提出这个问题之前,我经历了很多论坛,但与下面的代码无关
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;

答案 0 :(得分:1)
好的,让我们一步一步尝试:
如果你看到authDN
有第三个参数cb
,这就是你的回调函数。现在要追溯它,检查在authDN
函数内调用此函数postData
时提供的参数值,此处 cb = function output
现在输出的第一个参数是fake_res,它是true还是false,这取决于client.bind
的响应
如果失败,您将收到一些错误,因此它将继续为假。这是问题2 的答案,因为您的凭据似乎是正确的,因此错误等于null 因此您的fake_res始终为true。
回答问题4 这是因为它是作为参数传递的,以便将响应发送回您使用router.post
进行的API调用
关于 3号,使用错误优先回调更具可读性和更好性,但不是必需的。