Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 有没有办法定义特定于环境的mongoose中间件?_Node.js_Mongoose - Fatal编程技术网

Node.js 有没有办法定义特定于环境的mongoose中间件?

Node.js 有没有办法定义特定于环境的mongoose中间件?,node.js,mongoose,Node.js,Mongoose,我希望只能在特定环境中运行某些钩子。例如,我有一个执行图像处理的post.save,但我不需要在测试期间运行这个钩子。一种解决方案是在钩子本身中设置一个复选框,如下所示: FooSchema.post('save', function processImages() { if (process.env.NODE_TESTING) return; // do image processing }); 但我不想直接解释钩子本身的状态。另一种更可取的方法是包装钩子并引入另一个接受环境列表的参

我希望只能在特定环境中运行某些钩子。例如,我有一个执行图像处理的
post.save
,但我不需要在测试期间运行这个钩子。一种解决方案是在钩子本身中设置一个复选框,如下所示:

FooSchema.post('save', function processImages() {
  if (process.env.NODE_TESTING) return;
  // do image processing
});
但我不想直接解释钩子本身的状态。另一种更可取的方法是包装钩子并引入另一个接受环境列表的参数,这样钩子的定义如下:

FooSchema.post('save', function processImages() {
  // do image processing
}, { test: false, prod: true });

这种方法也不理想,因为我不想做任何包装。因此,我想听听是否有其他人已经解决了这一特定需求,如果是,采取了什么方法。谢谢

您可以将钩子包装起来并自行安装:

if (!process.env.NODE_TESTING) {
  FooSchema.post('save', function processImages() {
    // do image processing
  });
}
这样,就永远不会在测试中安装它