如何只为应用程序执行一次方法

时间:2015-07-13 14:47:08

标签: javascript node.js

我有一个NodeJS应用程序,我想执行一些文件验证方法但只有一次(此方法将验证节点应用程序下的某些文件)。

有优雅的方法吗?事件

1 个答案:

答案 0 :(得分:2)

NodeJS documentation on modules表示:

  

模块在第一次加载后被缓存。

您可以通过向模块添加静态代码来利用它。无论模块加载了多少次,静态代码都将保持其状态(/ value)。

您可以从方法中使用该状态来实现一个可以随时调用的方法 - 在初始化期间的最佳时间 - 但只能被调用一次。这很简单:

var called = false;

function checkFiles() {
  if (called) return;

  // Perform your validation
  called = true;
}

module.exports = {
  checkFiles: checkFiles
};

由于模块缓存,您可以根据需要在任意多个位置使用此文件,它仍然只执行一次。

要调用此功能,您有以下几种选择:

对于一个简单的应用程序,您可以从主模块(或函数)调用该函数,并在那时调用它。如果验证应该是异步的,您可以将main方法包装在函数中,并将其作为回调传递给验证器。

//#! /bin/env node
var express = require('express');
var validator = require('./validator');

validator.checkFiles();
var app = express();

var server = app.listen(3000, function () {
  ...
});

对于更复杂的应用程序,您应该在现有的初始化例程中调用此函数(同样,必要时使用回调)。

如果你有一个很好的现代基于承诺的初始化程序,你可以简单地添加验证器作为链的第一步。