我想在网址app
下提供与assets
文件夹位于同一级别的文件夹/app
。
使用AppController
可以根据网址提供文件,但我想知道是否可以像使用快递那样执行此操作?
app.use(express.static(__dirname + '/public'));
答案 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)
在我的头顶,有两个选择:
assets/app
。资源应该可以通过http://your.host.com/app/*
访问,因为这就是Sails服务资产的方式。在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:
之后,修改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访问任何内容: