module.js app.js 中的触发函数

Trigger function in app.js from module.js

第一次发帖 - 如有任何格式错误,请原谅(并叫我出来)!

假设我有 app.js,这需要 module.js。在 module.js 我有一个快速服务器 运行ning 可以接收简单的网络请求 (GET / POST)。当我在 module.js 中收到请求时,有什么方法可以触发 app.js 中的函数吗?

大致如下:

var webModule = require('./module.js')
webModule.on('GET', async function (req) {
    //do stuff with the request
});

之所以不直接把express server放在app.js是因为我想运行一定量的代码来验证请求是否合法,然后重新使用module.js 在单独的脚本中以最大程度地减少代码量 — 并避免每次我想更新身份验证过程时都必须更新 5-6 个脚本。

您可以使用 Node.js 中存在的事件系统。如果设置正确,您可以在每次调用时发出一个事件,并让侦听器响应该事件。

示例来自 Node.JS documentation

const EventEmitter = require('events');

class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter();
myEmitter.on('event', () => {
  console.log('an event occurred!');
});
myEmitter.emit('event');

在您的情况下,您可以创建一个 class 来扩展您在每个请求中使用的 EventEmitter。这个 class 然后可以在请求被调用时发出一个事件,然后通过设置监听器在你的 app.js 文件中处理。

我可能有解决方案,需要一些时间来编码(因为我的问题显然非常简单)。

module.js中:

var functionActions = {};

module.exports = {
    on : (async function(requestType, returnFunction){
      functionActions[requestType].do = returnFunction;
    });
 }
 
//general express code
app.get('*', function(req,res) { 
    if (verifyRequest(req) == 'okay'){ //authentication
        return functionActions['GET'].do();
    } else { //if the request is not authorised
        res.status(403).send('Stop trying to hack me you stupid hacker ಠ╭╮ಠ');
    }
});

我会试一试,并在找出潜在问题后更新此答案。