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

Javascript 如何为应用程序只执行一次方法,javascript,node.js,Javascript,Node.js,我有一个NodeJS应用程序,我想执行一些文件验证方法,但只执行一次(此方法将验证节点应用程序下的一些文件) 有没有一种优雅的方法可以做到这一点?事件?表示: 模块在第一次加载后被缓存 您可以通过向模块中添加静态代码来利用它。无论模块加载多少次,静态代码都将保留其状态(/value) 您可以从方法中使用该状态来实现一个方法,该方法可以在您喜欢的时候调用(在初始化期间的最佳时间),但只能调用一次。这很简单: var called = false; function checkFiles() {

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

有没有一种优雅的方法可以做到这一点?事件?

表示:

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

您可以通过向模块中添加静态代码来利用它。无论模块加载多少次,静态代码都将保留其状态(/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 () {
  ...
});
对于更复杂的应用程序,应该在现有的初始化例程中调用此函数(同样,根据需要使用回调)


如果您有一个很好的基于承诺的现代初始值设定项,您可以简单地添加验证器作为链的第一步。

通过给定路径名加载的模块只加载一次,因此,您可以在所需的模块内执行文件验证。@Pointy您能否提供示例,因为我需要调用模块内的函数来执行验证…@Pointy-为什么要删除您回答:)我删除了我的文件,因为@ssube提供了一个更好的文件,该文件的信息与我相同,除了他/她显然是一个实际的节点用户,而我不是。@Pointy“实际的节点用户”可能有点自由P你的回答确实提醒了我,我忘了从验证器导出任何东西。事实上,我并不认为这个问题是特定于节点的,尽管在节点环境中缺少方便的浏览器事件。谢谢投票,假设我提供了这个模块,你建议创建新的文件夹(如UTIL)并将其放置在那里还是…?在节点js应用程序中放置内部验证模块的位置在哪里(最佳实践…)你可以随心所欲地组织模块(或者根本不组织)。如果你有许多做不同事情的验证器,一个包含几个不同类的
utils/validator
目录可能是最清晰的结构。这完全取决于你。谢谢你的帮助,我还有一个问题,你能帮我吗?