2015-04-07 51 views
1

對於我通過翻譯人員寫的內容,我提前表示歉意,我對英語很不好。node.js,css驗證,w3c禁止我?

我遇到了以下問題:我需要執行驗證css文件。爲此,我決定使用NPM包w3c-css,首先它的工作,但後來開始給予「連接etimedout」,在研究過程中,我注意到通過瀏覽器和驗證器停止工作。

嗅探器的日誌在我的腳本的開始:link(< 10代表:()

我的代碼:

gulp.task('css', function() { 
    gulp.src('dev/sass/*.scss') 
    .pipe(through2.obj(function(file, enc, cb){ 
     w3c_css.validate({text: file.contents.toString('utf8')}, function(err, data) { 
     if(err) { 
      // an error happened 
      console.error(err); 
     } else { 
      // validation errors 
      console.log('validation errors', data.errors); 

      // validation warnings 
      console.log('validation warnings', data.warnings); 
     } 

     }); 
     cb(null, file); 
    })) 
    .pipe(gulp.dest('build/')); 
}); 

什麼原因是它一定是弄錯了,或者我因阻止?過於頻繁的請求,它不會改變?也許有一些其他的方式來檢查css文件?

THX!

+0

看來,這個軟件包不時被設計成運行,就像在測試中一樣,不是每次你改變你的文件。你可以檢查[另一個W3C驗證器的自述文件](https://github.com/thomasdavis/w3cjs) – camolin3

回答

0

來自W3C的CSS驗證服務的「About」頁:

我能在我這個驗證的應用程序?有沒有API?
是的,是的。 CSS Validator有一個(RESTful)SOAP接口,它可以很容易地構建應用程序(Web或其他)。 良好的禮儀和恭敬地使用共享資源當然是習慣性的:確保您的應用程序在驗證器調用之間休眠(),或者安裝並運行您自己的驗證器實例

所以是的,似乎你已被禁止。

我不知道如何做一個不定期的呼叫任務。您可能會mount a local version of the CSS Validator webserviceediting the w3c-css package指向您自己的服務器。

0

確保腳本在請求之間至少睡1秒鐘。 從manual

注意:如果您希望以編程方式調用驗證的文件批 ,請確保您的腳本會在 至少1請求之間的第二睡。 CSS驗證服務是一項免費的公共服務,敬請期待。謝謝。

爲了驗證多個鏈接,使用async + setTimeout或任何相關辦法的要求之間暫停:

'use strict'; 

var async = require('async'); 
var validator = require('w3c-css'); 

var hrefs = [ 
    'http://google.com', 
    'https://developer.mozilla.org', 
    'http://www.microsoft.com/']; 

async.eachSeries(hrefs, function(href, next) { 
    validator.validate(href, function(err, data) { 
    // { process err, data.errors & data.warnings } 

    // sleep for 1.5 seconds between the requests 
    setTimeout(function() { next(err); }, 1500); 
    }); 
}, function(err) { 
    if(err) { 
    console.log('Failed to process an url', err); 
    } else { 
    console.log('All urls have been processed successfully'); 
    } 
}); 

編輯:

爲了緩解這個問題: