我第一次尝试 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/