javascript - NodeJS 从基于自定义模块的匿名函数获取对象

标签 javascript node.js object module

我第一次尝试 NodeJS,这个服务器非常棒,但是我遇到了一个小问题,我不明白我做错了什么:(

我有两个文件:server.js 和rules.js

rules.js 读取 Rules.html 并必须将其内容返回到对象中,如下所示:

{'title':'Title','msg':'<div id="test">[...]</div>'}

Rules.js

exports.getRule = function(data) {
    var fs = require('fs');
    var rulesPath = __dirname + '/views/rules.html';
    fs.readFile(rulesPath, {encoding:'utf-8'}, function(error, data) {
        if(!error){
            var rules = {"title":"Règles du chat","msg":data};
        } else {
            var rules = {"title":"Erreur lors de la récupèration des règles du chat","msg":"<div id=\"error\">Une ereur s'est produite lors de la récupération des données, veuillez rééssayer plus tard...<br />Si le problème persiste signalez le</div>"};
        }
        return rules;
    });
}

Server.js

// Load custom Rules module
var rules = require(__dirname + '/private/rules/rules.js');

// Perform actions when the client want open jQueryUI modal dialog 
socket.on('openBox', function(data) {
    if(data.id == 'rules'){
        console.log(rules.getRule(data));
        socket.emit('openBox',rules.getRule(data));
    }
});

最佳答案

function(error, data) {
    if (!error) {
        var rules = {
            "title": "Règles du chat",
            "msg": data
        };
    } else {
        var rules = {
            "title": "Erreur lors de la récupèration des règles du chat",
            "msg": "<div id=\"error\">Une ereur s'est produite lors de la récupération des données, veuillez rééssayer plus tard...<br />Si le problème persiste signalez le</div>"
        };
    }
    return rules;
}

这段代码称为回调函数。当读取数据可用时,fs.readFile 将调用此函数。当您从回调函数返回时,您实际上返回到fs.readFile,它很可能会忽略回调的返回值。这就是您的代码不起作用的原因。您应该做的是,从 Server.js 传递回调函数,如下所示

socket.on('openBox', function(data) {
    if (data.id == 'rules') {
        rules.getRule(data, function(error, data) {
            if (!error) {
                var rulesObj = {
                    "title": "Règles du chat",
                    "msg": data
                };
            } else {
                var rulesObj = {
                    "title": "Erreur lors de la récupèration des règles du chat",
                    "msg": "<div id=\"error\">Une ereur s'est produite lors de la récupération des données, veuillez rééssayer plus tard...<br />Si le problème persiste signalez le</div>"
                };
            }
            console.log(rulesObj);
            socket.emit('openBox', rulesObj);
        });
    }
});

并像这样更改Rules.js

exports.getRule = function(data, callBackFunction) {
    var fs = require('fs');
    var rulesPath = __dirname + '/views/rules.html';
    fs.readFile(rulesPath, {encoding:'utf-8'}, callBackFunction);
}

关于javascript - NodeJS 从基于自定义模块的匿名函数获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22537001/

相关文章:

java - NullpointerException 数组和对象

javascript - While 循环和innerHTML - 为什么它会反向显示数字?

javascript - jquery ajax 在 str.replace 后不工作

javascript - 更改 sails.js EJS View 以使用 .html 扩展名而不是 .ejs 扩展名?

javascript - 使用 node.js 注册/登录示例

node.js - 获取 504 GATEWAY_TIMEOUT NodeJs

javascript - 在nodejs中将异步结果添加到数组

javascript - 所有对象属性不为空的javascript

javascript - 在 JavaScript 中将变量分配给对象

javascript - 如何根据对象中的值来限制对象类型?