【问题标题】:How to serve a static folder in sails.js?如何在sails.js 中提供静态文件夹?
【发布时间】:2023-03-21 14:25:01
【问题描述】:

我想在 url /app 下提供一个文件夹 app,它与 assets 文件夹处于同一级别。

AppController 可以根据 url 提供文件,但我想知道是否可以使用 express 进行如下操作?

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

【问题讨论】:

标签: sails.js


【解决方案1】:

在我的脑海中,有两个选择:

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

【讨论】:

  • 我遇到了同样的问题。我有 index.html,它是 SPA(骨干网和 require.js)......我如何在sails.js 中提供它?
  • 我尝试在资产中创建一个新目录,但sails 不提供新目录中的文件。
  • 没关系。我没有在文件名的末尾添加扩展名,因此显然 url 被解释为目录而不是文件,然后失败了,因为这个不存在的目录中没有 index.html 文件。
  • 看起来sails.express.app 不存在
【解决方案2】:

您可以通过将自定义中间件添加到您的 config/http.js 中来使用 express insails 的自定义中间件:

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

【讨论】:

  • 答案很好,但第二行缺少“var app = express();”
  • customMiddleware 在sails v1.0 中已弃用
  • 检查我对 Sails v.1.0 的回答
【解决方案3】:

您可以像这样简单地提供文件:

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】:

    我正在使用 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 中,我可以使用以下命令访问引导 css:

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

    【讨论】:

      【解决方案5】:

      您可以将它用于风帆 0.12.3:

      • 在你的风帆上安装 express:npm install express --save
      • 之后,修改config/route.js

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

      这会奏效。但是,您必须创建一个目录作为公共目录的父目录,这有点难看。这是因为express创建的静态中间件在计算目标文件路径时会计算'/public/'前缀。

      【讨论】:

      • 你通过讲述前缀救了我的命……现在它又开始工作了!
      【解决方案6】:

      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

      【讨论】:

        【解决方案7】:

        Sails v1.0:使用 . dot 文件夹中的风帆。示例:https://myWebSite.com/.well-known/test.txt

        在 config/http.js 文件中添加 express.static 进行服务,然后在 order 数组中添加 publicFolder。

        module.exports.http = {
        middleware: {
        
        publicFolder: express.static('public/public'),
        
          order: [
              'cookieParser',
              'session',
              'publicFolder'
              // 'favicon',
            ],
        }}
        

        创建公用文件夹和.well-known 文件夹so public/.well-known/test.txt

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-12
          • 1970-01-01
          • 2023-03-18
          • 2017-08-25
          • 2020-08-08
          • 1970-01-01
          相关资源
          最近更新 更多