Как обслуживать статическую папку в 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:
Это будет работать. Тем не менее, немного уродливо, что вам нужно создать каталог в качестве родителя для вашего общего каталога. Это связано с тем, что статическое промежуточное ПО, созданное экспресс, будет считать префикс '/public/' при вычислении пути к целевым файлам.