2013-12-12 34 views
11

我想提供一個文件夾app,它與assets文件夾處於同一級別,位於url /app下。如何在sails.js中提供靜態文件夾?

AppController有可能根據url提供文件,但我想知道是否可以用express來做到這一點?

app.use(express.static(__dirname + '/public')); 
+0

請看看這個StackOverflow質量保證:http://stackoverflow.com/q/41164733/1056679。 –

+1

sails.js中沒有默認行爲的事實真的讓我對框架本身感到害怕...... –

回答

5

關閉我的頭頂,有兩種選擇:

  1. 創建一個符號鏈接指向assets/app到你的目的地。這些資源應該可以通過http://your.host.com/app/*訪問,因爲這是Sails提供資產的方式。
  2. 目前仍然快速帆下,你應該能夠sails.express.app訪問,並做你的事,讓我們說,從config/bootstrap.js

    var express = require('express');

    ...

    sails.express.app.use(express.static(process.cwd() + '/app'));

+0

我遇到同樣的問題。我有index.html這是SPA(主幹和require.js)...我怎麼可以在sails.js內服務? –

+0

http://stackoverflow.com/questions/21097679/confusion-about-web-application-ports/21099224#21099224 – bredikhin

+0

我試着在資產內創建一個新目錄,但是sails沒有提供新目錄中的文件。 –

12

通過添加到config/http.js中,您可以使用自定義中間件在sails中進行快速表達:

var express = require('express'); 
module.exports.express = { 
    customMiddleware: function (app) { 
     app.use(express.logger()); 
     app.use(express.compress()); 
     app.use('/app', express.static(process.cwd() + '/../client/www/')); 
    } 
}; 
+0

答案很好,但第二行缺少「var app = express();」 –

+0

不工作在0.12 – Crusader

1

你可以爲你的文件,簡單的像這樣:

var express = require('../node_modules/sails/node_modules/express'); 

module.exports.express = { 
    middleware: { 
    custom: true 
    }, 

    customMiddleware: function (app) { 
    app.use(express.logger()); 
    app.use(express.compress()); 
    app.use('/api/docs',express.static('assets/swagger-ui/dist/')); 
    } 
}; 

這是我的配置/ express.js文件

2

我使用Sails.js v0.12.4。 http.js使用module.exports.http而不是module.exports.express我做了以下事情來提供另一個文件夾,如現有的/assets文件夾。在我的例子,以服務立app文件夾,替換/app

'node_modules/bootstrap/dist'路徑在config/http.js文件我加

var express = require('express'); 

然後在middleware對象我增加了快速靜態模塊。我想要提供包含在我的node_modules文件夾中的引導資源。

bootstrapAssets: express.static('node_modules/bootstrap/dist'), 

然後order陣中,我在我想這個中間件運行的順序添加'bootstrapAssets'。下面是完整的代碼:

var express = require('express'); 

module.exports.http = { 

    middleware: { 

    passportInit : require('passport').initialize(), 
    passportSession : require('passport').session(), 

    bootstrapAssets : express.static('node_modules/bootstrap/dist'), 


    order: [ 
     'startRequestTimer', 
     'cookieParser', 
     'session', 
     'bootstrapAssets', 
     'passportInit', 
     'passportSession', 
     'myRequestLogger', 
     'bodyParser', 
     'handleBodyParserError', 
     'compress', 
     'methodOverride', 
     'poweredBy', 
     '$custom', 
     'router', 
     'www', 
     'favicon', 
     '404', 
     '500' 
    ], 

現在在我的HTML我使用下面的可以訪問引導CSS:

<link rel="stylesheet" href="/css/bootstrap.min.css"> 
0

您可以使用此爲船帆0.12。3:

  • 安裝快遞給您帆:故宮安裝快車--save
  • 之後,修改配置/ route.js

    module.exports.routes = { ... '/public/*': require('express').static('the-directory-that-contains-public-director') ... }

這將作品。但是,您必須創建一個目錄作爲公用目錄的父級,這有點難看。這是因爲通過express創建的靜態中間件會在計算到目標文件的路徑時計算'/ public /'前綴。

相關問題