2014-09-12 66 views
3

我有一些文件夾在我的源中,我想通過一個咕嚕任務使用連接來提供服務。我的文件夾結構如下...爲Grunt連接服務器配置別名目錄

  • /
  • /src目錄
    • index.jade
    • /風格
      • 的main.css
  • /dist
    • 的index.html
  • /文檔
    • 的index.html

我咕嚕配置看起來是這樣的......

grunt.initConfig({ 
    connect: { 
     options: { 
      port: 8080, 
      hostname: '0.0.0.0', 
      livereload: 35729 
     }, 
     app: { 
      options: { 
       middleware: function (connect) { 
        return [ 
         connect.static(require('path').resolve(pkg.paths.dist)), 
         connect.static(require('path').resolve(pkg.paths.src)), 
         connect.static(require('path').resolve(pkg.paths.docs)) 
        ]; 
       } 
      } 
     }, 
    } 
}) 

發射了一臺服務器,並且訪問​​會給我index.html來自dist的文件 - 這是從index.jade編制而來的,main.css是從src開始提供的。這非常好,而且效果很好。

現在我想從docs訪問index.html文件,但是在別名url上 - 如http://localhost:8080/mycustomurl。我不想將我的文檔放在一個子文件夾中,我只想將連接配置爲從docs目錄中匹配mycustomurl的url。

如何修改我的配置以實現此目的?

回答

2

使用自定義中間件。 middleware選項需要一個返回中間件數組的函數。

custom_middleware: { 
    options: { 
    middleware: function(connect, options, middlewares) { 
     return [connect.static(require('path').resolve(pkg.paths.dist)), 
       connect.static(require('path').resolve(pkg.paths.src)), 
       function (req, res, next) { 
       if (req.url !== '/custom/url') { 
        next(); 
        return; 
       } 
       // res.sendFile(pkg.paths.docs + '/index.html'); 
       // you can access the "anything.html" by parsing the req.url 
       var file = req.url.split('/'); 
       file = file[file.length-1]; 
       res.sendFile(pkg.paths.docs + file); 
       } 
     ]; 
    } 
    } 
} 

有關更多配置選項,請參閱example Gruntfile

+0

感謝您的回答,但我不想僅從新路線提供一個文件,我想代理任何匹配從不同文件夾提供的模式的任何內容。 – 2014-09-21 11:23:22

+0

什麼,你真的嘗試我的解決方案,這不是服務一個文件,這裏有三個中間件,第三個代理到不同的文件夾匹配'/ custom/url'模式。 @BillyMoon – user3995789 2014-09-21 11:26:22

+0

我希望'/ custom/url/anything.html'的請求在'docs'文件夾中作爲文件'anything.html'提供 - 並不總是爲index.html提供服務。 – 2014-09-21 11:30:23