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 ಠ╭╮ಠ');
}
});
我会试一试,并在找出潜在问题后更新此答案。
第一次发帖 - 如有任何格式错误,请原谅(并叫我出来)!
假设我有 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 ಠ╭╮ಠ');
}
});
我会试一试,并在找出潜在问题后更新此答案。