Как обслуживать статическую папку в sails.js?

Я хочу обслуживать папку app, которая находится на том же уровне с папкой assets, под адресом /app.

Возможно, если AppController обслуживает файл по URL-адресу, но я хочу знать, можно ли это сделать следующим образом с выражением?

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

Ответ 1

Вы можете использовать специальное промежуточное программное обеспечение для экспресс-доставки в парусах, добавив его в свой 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/'));
    }
};

Ответ 2

Сверху моей головы есть два варианта:

  • Создайте символическую ссылку assets/app, указывающую на ваш пункт назначения. Ресурсы должны быть доступны через http://your.host.com/app/*, так как путь Sails обслуживает активы.
  • По-прежнему Express под парусами, вы должны иметь доступ к нему с помощью sails.express.app и выполнять свою работу, скажем, от config/bootstrap.js:

    var express = require('express');

    ...

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

Ответ 3

Я использую 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 я добавил экспресс-статический модуль. Я хочу обслуживать загрузочные активы, содержащиеся в моей папке 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">

Ответ 4

Вы можете просто простыми файлами:

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

Ответ 5

Вы можете использовать это для парусов 0.12.3:

  • Установить экспресс в ваш парус: npm install express --save
  • После этого измените config/route.js

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

Это будет работать. Тем не менее, немного уродливо, что вам нужно создать каталог в качестве родителя для вашего общего каталога. Это связано с тем, что статическое промежуточное ПО, созданное экспресс, будет считать префикс '/public/' при вычислении пути к целевым файлам.