Node.js 节点模块.导出和递归
我正在开发一个节点应用程序,它本质上是一个简单的AWS SQS轮询器,可以坐在不同的队列中收听新项目 这是我的Node.js 节点模块.导出和递归,node.js,Node.js,我正在开发一个节点应用程序,它本质上是一个简单的AWS SQS轮询器,可以坐在不同的队列中收听新项目 这是我的模块。导出: module.exports = { readMessage: function(qParams, qType, tableName) { logger.debug(qType); SQS.receiveMessage(qParams, handleSqsResponse); function handleSqsR
模块。导出:
module.exports = {
readMessage: function(qParams, qType, tableName) {
logger.debug(qType);
SQS.receiveMessage(qParams, handleSqsResponse);
function handleSqsResponse (err, data) {
if(err) logger.error("handleSqsResponse error:" + err);
if (data && data.Messages) {
data.Messages.forEach(processMessage)
readMessage(); // continue reading until draining the queue (or UPTIME reached)
}
else{
logger.debug("no data in sqs.");
// process.exit();
}
}
// 'processing' is mainly writing to logs using winston. Could add here any transformations and transmission to remote systems
function processMessage(sqsMessage){
// Parse sqs messag
var msgObj = JSON.parse(sqsMessage.Body);
// Process
logger.info(msgObj.Message);
_.extend(qParams, { "ReceiptHandle": sqsMessage.ReceiptHandle });
dbMap[qType](msgObj, qParams, tableName);
}
}
}
我遇到的问题是当我尝试调用readMessage()时代码>再次。我得到了ReferenceError:readMessage未定义模块的错误。exports
是一个普通对象,暴露给具有方法readMessage
的外部模块readMessage()
应该是module.exports.readMessage()
我还建议创建一个变量,然后导出:
var obj = {
readMessage: function(qParams, qType, tableName) {
logger.debug(qType);
SQS.receiveMessage(qParams, handleSqsResponse);
function handleSqsResponse (err, data) {
if(err) logger.error("handleSqsResponse error:" + err);
if (data && data.Messages) {
data.Messages.forEach(processMessage)
obj.readMessage(); // continue reading until draining the queue (or UPTIME reached)
}
else{
logger.debug("no data in sqs.");
// process.exit();
}
}
// 'processing' is mainly writing to logs using winston. Could add here any transformations and transmission to remote systems
function processMessage(sqsMessage){
// Parse sqs messag
var msgObj = JSON.parse(sqsMessage.Body);
// Process
logger.info(msgObj.Message);
_.extend(qParams, { "ReceiptHandle": sqsMessage.ReceiptHandle });
dbMap[qType](msgObj, qParams, tableName);
}
}
}
module.exports = obj;
请注意,我只回答了你特别提出的问题。我没有考虑任何与代码相关的架构问题。啊,明白了。这是有道理的!然后我就可以传入最初传入readMessage()
方法的相同变量了?没错。。。你可能想添加一个计时器,但我想这取决于数据的变化频率,非常感谢!!你为我节省了很多时间!请不要只发布代码作为答案,还要解释代码的作用以及它是如何解决问题的。带有解释的答案通常更有帮助,质量更好,更容易吸引选票。
function functionName(has = false){
var total = 0;
if(has){
functionName(true)
} else {
// Todo
}
}
module.exports.functionName = functionName;