0

我显然错过了关于 Node.js 和 Actionhero 如何工作的一些非常重要的东西。

有人可以向我解释为什么会出现以下问题:

我有这个简单的代码:基本上它读取一个 .css 文件。

buildAdsHTML: function (ads, type) {
        var cssDir = path.normalize(__dirname + '/../public/css/');
        switch (type) {
            case  'text':
                var result = '';
                console.log("STEP 1");
                fs.readFile(cssDir + type + 'Ads.css', {encoding: 'utf8'}, function (err, data) {

                    console.log(err);
                    console.log(data);
                    if (!err) {

                        console.log("STEP 2");
                        result += '<style>' + data + '</style>';

                    } else {

                    }
                });

                break;

        }
        console.log('STEP 3');
        return result;
    }

现在,当运行此代码时,我得到一个空字符串作为结果。控制台输出如下:

STEP 1 <- so far so good 
STEP 3<- this should be last!

null <- this is the error variable 

.some-random-css-class{
    display: block;
    width: 100;
    min-height: 250px;
}

STEP 2

现在在某个时候我发现那fs.reafFile是异步功能。所以我自然将其更改为同步版本fs.readFileSync。现在控制台输出更糟:

STEP 1
STEP 3

而已!没有其他的。结果我仍然得到一个空字符串。就像整个代码甚至没有通过swich.

我在我的 actionhero 项目的所有函数和方法中都注意到了这种行为,尤其是在调用next(connection). 您不能只在方法结束时调用它。

对于每个if人或swich 我必须在内部调用它才能对结果进行任何实际控制。

否则我添加到连接中的每个新数据都会丢失。

那是怎么回事?请详细解释该功能,以便我在编码时不会犯任何愚蠢的错误。

4

2 回答 2

0

终于想通了。

问题是我没有注意到fs.readFileSync没有回调函数。

因此,该功能的正确用途应该是

var result= fs.readFileSync(pathToFile,{options})
return result;

我仍然可以对我提到的问题使用一些帮助next(connection);。我真的不知道为什么它会跳过整个代码部分。

于 2014-12-04T09:49:42.760 回答
0

如果你传递任何参数,我发现 next() 不喜欢它。我的应用程序中有一个错误有一两天,因为我在做'.then(next);'

于 2016-02-10T19:25:42.343 回答