如何在sails.js中提供静态文件夹?

时间:2013-12-12 12:13:49

标签: sails.js

我想在网址app下提供与assets文件夹位于同一级别的文件夹/app

使用AppController可以根据网址提供文件,但我想知道是否可以像使用快递那样执行此操作?

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

6 个答案:

答案 0 :(得分:12)

您可以将自定义中间件用于帆中快递,方法是将其添加到您的config / http.js中:

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/'));
    }
};

答案 1 :(得分:6)

在我的头顶,有两个选择:

  1. 创建指向目的地的符号链接assets/app。资源应该可以通过http://your.host.com/app/*访问,因为这就是Sails服务资产的方式。
  2. 在Sails下面仍有Express,您应该可以使用sails.express.app访问它,并且从config/bootstrap.js开始执行您的操作:

    var express = require('express');

    ...

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

答案 2 :(得分:2)

我正在使用Sails.js v0.12.4。 http.js使用module.exports.http而非module.exports.express我执行了以下操作来提供另一个文件夹,例如现有的/assets文件夹。在我的示例中,要提供app文件夹,请将'node_modules/bootstrap/dist'路径替换为/app

在我添加的config/http.js文件中

var express = require('express');

然后在middleware对象中添加了express静态模块。我想要提供我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中,我可以使用以下内容访问bootstrap css:

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

答案 3 :(得分: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/'));
  }
};

这是我的config / express.js文件

答案 4 :(得分:1)

您可以将此用于帆0.12.3:

  • 为您的帆安装快递:npm install express --save
  • 之后,修改config / route.js

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

这样可行。但是,您必须创建一个目录作为公共目录的父目录,这有点难看。这是因为通过快递创建的静态中间件将计算&#39; / public /&#39;计算到目标文件路径的前缀。

答案 5 :(得分:0)

Sails 1.0 中,您可以修改文件 config / routes.js 并添加以下内容:

var express = require('express')
var serveStatic = require('serve-static')
var os = require('os')

const dir = `${os.homedir()}/foo` // dir = /home/dimas/foo

module.exports.routes = {

  '/public/*': serveStatic(dir, {skipAssets: true}), // <-- ADD THIS

  '/': {
    controller: 'FooController',
    action: 'checkLogin'
  },

};

然后,您必须创建目录结构:

/home/dimas/foo/public

注意,在文件系统路径中包含 public 条目(路由),必须将要提供的文件放在此处!

之后,您可以通过点击以下URL访问任何内容:

http://localhost:1337/public/foratemer.txt