Javascript 在node.js中获取变量的闭包

Javascript 在node.js中获取变量的闭包,javascript,node.js,mongodb,authentication,express,Javascript,Node.js,Mongodb,Authentication,Express,我正在为闭包中的get变量编写论文软件 这是我在node.js中的代码 var kepala = express.basicAuth(authentikasi); // authenticate for login function authentikasi(user, pass, callback) { // declrare my database mongodb db.collection('ak_teacher', function (err, data) {

我正在为闭包中的get变量编写论文软件

这是我在node.js中的代码

var kepala = express.basicAuth(authentikasi);
// authenticate for login 

function authentikasi(user, pass, callback) {
    // declrare my database mongodb
    db.collection('ak_teacher', function (err, data) {
        data.findOne({
            'tch_name': {
                '$regex': user
            }
        }, function (err, level) {

            console.log(level); // monitor data

            if (level == null) {
                console.log('Nilai database kepala sekolah masuk Null ulangi login');
                callback(null);
            } else {

                var a = level.tch_name;
                var b = level.tch_password;

                var c = level.sch_id; // (i need this variable for next code) 

                var result = (user === a && pass === b);
                console.log("id Sekolah : " + c);
                callback(null /* error */ , result);
            }
        });
    });
};

var tes = authentikasi(); // (in here i dont know declare for get my variable c)

app.get('/siswa_2', kepala, function (req, res) {
    // i use variable in here                            
    var sch_id = tes;
    console.log("id school in query :" + sch_id);
    console.log('Menampilkan Seluruh data Siswa');
    db.collection('ak_student', function (err, collection) {
        collection.find({
            "sch_id": sch_id
        }).toArray(function (err, items) {
            console.log(items);
            res.send(items);

        });
    });
});

我正在尝试获取变量
c

您还需要将
c
传递到回调中以获取其值:

callback(null /* error */, result, c);
然后像这样调用
authentikasi

// Note, since this callback is called by passing "c"
// as the third argument, this is how we assign it to "tes"
//                                             |
//                                             |
//                                             V
authentikasi(user,pass,function(unused,result,tes) {
  app.get('/siswa_2', kepala, function(req, res) {
    var sch_id = tes;
    console.log("id school in query :" +sch_id);
    console.log('Menampilkan Seluruh data Siswa');
    db.collection('ak_student', function(err, collection) {
      collection.find({"sch_id":sch_id}).toArray(function(err, items) {
        console.log(items);
        res.send(items);
      });
    });
  });
});

您还可以利用:

响应局部变量的作用域是请求,因此 可用于在该请求/响应期间呈现的视图 循环,如果有的话。否则,此API与app.locals相同

此对象对于公开请求级别的信息非常有用,例如 请求路径名、已验证用户、用户设置等

c
分配给
res.locals.c
应该允许您在该特定请求和后续响应的后续元素中使用它。

根据,您应该使用用户对象回调。您可以简单地将
c
变量放在那里:

var kepala = express.basicAuth(authentikasi);

function authentikasi(user, pass, callback) {
    // declrare my database mongodb
    db.collection('ak_teacher', function (err, data) {
        data.findOne({
            'tch_name': {
                '$regex': user
            }
        }, function (err, level) {
            console.log(level); // monitor data

            if (level == null) {
                console.log('Nilai database kepala sekolah masuk Null ulangi login');
                callback(null);
            } else {
                var a = level.tch_name;
                var b = level.tch_password;
                var c = level.sch_id; // (i need this variable for next code) 

                if (user === a && pass === b) {
                    console.log("id Sekolah : " + c);
                    callback(null, {name: a, id: c});
//                                 ^^^^^^^^^^^^^^^^
                } else
                    callback(null, false);
            }
        });
    });
};
// don't try to authenticate outside of the request context

app.get('/siswa_2', kepala, function (req, res) {
    var sch_id = req.user.id;
//               ^^^^^^^^^^^
    console.log("id school in query :" + sch_id);
…
});

这是一个格式非常糟糕的代码…你需要什么样的闭包?什么函数中有什么变量?还有一个人想从异步代码返回值。本周我已经回答了三个类似的问题,我这样做只是因为我厌倦了把这样的问题作为重复来结束,因为找到一个我喜欢的答案比简单地回答这个问题更难。我们需要一个好的,众所周知的社区答案。我在node.js中的代码我在使用framework expressor请帮助我获取变量c,以便在var-tes中使用。。我不知道如何使用逻辑来获取它。请稍候,我现在正在尝试。嗯,我正在尝试,但出现了错误。。用户,传递未定义的authentikasi我用于登录我正在进行登录,但我需要变量c在get/siswat中声明下一个我的代码函数如下:
function authentikasi(user,pass,callback){}
这意味着它希望您传递用户名字符串、密码字符串和回调函数。将其称为
authentikasi()
毫无意义。这是关于函数在任何语言中如何工作的基本编程知识。如果你甚至不理解这一点,我不明白任何人怎么会期望你编写javascript,它需要匿名函数、闭包、异步/面向事件编程等方面的知识。对不起所有其他stackoverflow成员,但我用马来语写这篇文章是为了确保没有误解:对不起,tapi“我正在登录”杜德贝图尔。代码ni tak akan login sebab anda tak beri用户名和密码kepada函数authentikasiuntuk dibandinkan dengan level.tch_name and level.tch_password。我正在使用此教程:[我的代码中的单路径身份验证有数据库mongodb我在使用用户名和密码..在我的数据库中我有var c=schu id(学校id)我在下一次声明变量c时得到了它。我在关闭变量c时遇到了麻烦,请帮助我。谢谢你的回答。我需要数据库中的变量id学校AKU教师按id学校声明我的代码搜索。我在AKU教师中得到变量c=schu id时遇到了麻烦。
res.locals.id=level.schu id;
然后让你在请求/响应处理中使用id作为res.locals.id。你是天才吗^ ^谢谢兄弟我工作了2天这个代码我很困惑你是天才上帝保佑你的朋友