如何基于来自先前中间件的响应使用Express POST运行该功能
我是MEAN.io的新手
下面写的函数(authDN)和单独运行一样正常,如下所示。
当我直接运行该函数时,我在控制台中得到了正确的响应
authDN('myuserName', 'myPassword', output);
但是我想用router.post运行该函数并运行函数(authDN),所以每当进行POST调用时我想根据authDN
返回的响应显示响应,并且我想通过userNT
,password
来自postData
也对authDN
起作用
有人可以帮我解决这个问题
var express = require('express');
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) {
var client = ldap.createClient({ url: 'ldap://localhost:389' });
client.bind(dn, password, function (err) {
client.unbind();
cb(err === null, err);
});
}
function output(res, err) {
if (res) {
console.log('success');
} else {
console.log('failure');
}
}
app.use(bodyParser.json()); // support json encoded bodies
app.use(bodyParser.urlencoded({ extended: false })); // support encoded bodies
router.post('/login', postData, authDN(userNT, password, output));
function postData(req, res) {
userNT = req.body.ntid;
password = req.body.password
};
module.exports = router;
回答如下:
router.post('/login', postData);
function postData(req, res) {
userNT = req.body.ntid;
password = req.body.password;
authDN(userNT, password, output,res); //send res also
};
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); //pass res to callback
});
}
function output(fake_res, err, res) {
if (fake_res) {
console.log('success');
res.send('success') //here
} else {
console.log('failure');
res.send('failure') //here
}
}