如何使Node.js中的模块为非静态?

时间:2019-11-14 20:37:07

标签: node.js angular module

我有一个带有节点js和静态Angular Files的应用程序。我需要nodejs来检查带有授权令牌的请求标头。为此,我有一个模块,用于检查令牌是否有效,如果是这种情况,则用户可以访问以下所有get-method。 可以与app.use(检查令牌的模块)一起使用。

但是我还需要用户的电子邮件地址,该地址写在已解码的令牌中。此电子邮件地址必须在Angular应用中可以访问。为此,我植入了get方法,Angular Application可以调用该方法并将其发送回电子邮件。

我的问题是,如何以安全的方式获取电子邮件地址。现在,我已经编辑了模块并添加了另一个功能。模块的伪代码:

各种电子邮件=“”; Module.exports = verfiyToken(req,rsp,next){

  • 获取req参数的标题
  • 检查令牌
  • 如果令牌有效,则设置email = realEmailFromToken

//这是存在的,否则index.js的以下get-method永远不会被调用。 如果(存在下一个),则调用next()

返回不重要,因为从未达到; }

现在同一模块中的其他功能 Module.exports = getEmail(){

//Email has the right value if the function verifyToken was successful once. That is always the case, because if not, then getEmail can never be called.
Return email;

}

这对我有用,但是我认为模块是Singleton。如果用户A成功拨打电话并且在网站中,我会看到问题。下一步,用户B成功拨打该网站,并获得一个经过验证的令牌。现在,变量“ email”具有用户B的电子邮件地址。如果用户A现在在Angular中调用该电子邮件调用的组件,那么他将获得用户B的电子邮件。

您了解我的问题吗?如何获得模块为每个会话创建实例?

对不起,英语。如有任何疑问,我会回答。

最好的问候

1 个答案:

答案 0 :(得分:0)

关闭是您的朋友在这里。

听起来您想做这样的事情。考虑sample-module.js,它导出返回一个函数的函数:

// Anything declared here is static and visible across all modules
const moduleGlobalStatic = 'this value is shared by all.';

exports = module.exports = function( a, b, c ) {
  // stuff declare here is invocation-specific

  let invocationSpecificStatic = `this is unique to each invocation - a:${a}, b:${b}, c:${c}`;

  function doSomething( x , y , z ) {
    // do something with a, b, c, x, y, and z
  }

  return doSomething;
}

用法很简单:

const doSomething1 = require('sample-module')(1,2,3); const doSomething2 = require('sample-module')('alpha','bravo','charlie');

doSomething()关闭在上述不同范围内可见的变量。

  • doSomething1doSomething2共享moduleGlobalStatic

  • doSomething2doSomething2分别获得abc以及invocationSpecificStatic的值

  • 每次调用doSomething1doSomething2时,他们都会得到自己的xyz的副本。但是,它们的abcinvocationSpecificStatic变量在每次调用时都是不变的(除非它们在执行过程中对其进行了修改)。