【问题标题】:Parsing JavaScript code in Node.js module在 Node.js 模块中解析 JavaScript 代码
【发布时间】:2019-11-28 01:08:00
【问题描述】:
// ===============================================================================
// Auth
// ===============================================================================
const admin = require('firebase-admin');     //what happens if i move this line
admin.initializeApp();                       //and this line

module.exports = function(app) {

//to this line
//and this line?

  app.post('/login', function(req, res) {
    const token = req.body.token;

    console.log('token sent: ' + token);

    admin
      .auth()
      .verifyIdToken(token)
      .then(result => {
        console.log('verifyIdToken result: ' + result);
      });

    res.send({ valid: 'havent programmed this yet' });
  });
};

假设我正在使用上面的代码。我很好奇为什么如果我放置第一行代码它仍然运行:

const admin = require('firebase-admin');
admin.initializeApp(); 

从那个module.exports到里面的匿名函数的外面呢?我感到很困惑!这个函数是否在它的模块之外寻找这个范围,从 module.exports 内部而不是在它外部声明这个 admin const 有什么区别?

【问题讨论】:

    标签: javascript node.js express node-modules


    【解决方案1】:

    要了解发生了什么,您需要了解 Javascript 闭包和模块模式。

    当这两行在 module.exports 之外时,它们是全局范围的一部分,因此 visible 是您的模块的一部分。这是因为在任何函数、块或模块范围之外定义的变量在文件中都有global scope

    当您将其移入模块时,它们将成为功能/模块范围的一部分,因此再次成为visible

    您可以阅读这篇古老但相关的文章以获得更好的理解。 https://www.joezimjs.com/javascript/javascript-closures-and-the-module-pattern/

    【讨论】:

    • 我会小心使用“全局范围”这个词。更好的术语是module scopeimport scope imo。例如,全局范围将引用 windowprocess 对象之类的东西。
    猜你喜欢
    • 1970-01-01
    • 2010-10-17
    • 2021-05-21
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    相关资源
    最近更新 更多