【问题标题】:node js express - how to serve a static content for variable urlsnode js express - 如何为变量 url 提供静态内容
【发布时间】:2013-12-26 06:55:47
【问题描述】:

app.use documentation 显示了为静态路由提供静态目录的示例,例如

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

指定为非静态路由提供静态目录的语法是什么?

按照其他地方的语法(app.get 等),app.use('/:foo', express.static(__dirname + '/public')); 应该可以工作。但是,我总是收到 Cannot GET /bar 错误。

【问题讨论】:

  • 你把我弄丢了,要么你有一个包含与浏览器请求的文件名实际匹配的静态文件的目录,要么你已经定义了创建浏览器请求的内容的路由,你怎么有一个静态的非静态请求的目录?
  • 我想为 xyz.com、xyz.com/a、xyz.com/b 等提供网站内容的一个目录(我没有决定这个设计。)
  • 这个问题是为this github contribution服务的,顺便说一句。

标签: node.js static express routes


【解决方案1】:

您可以使用res.sendfile() 变量路径来指向相同的静态内容:

app.get('/:location', function(req, res){
  res.sendfile(__dirname + '/public/index.html');
});

【讨论】:

    【解决方案2】:

    如果你想保留express.static 附带的所有功能,那么你可以猴子补丁req.url (因为它只是中间件):

    const path = require('path');
    const express = require('express');
    const app = express();
    
    // Dynamic path, but only match asset at specific segment.
    app.use('/static/:foo/:bar/:asset', (req, res, next) => {
      req.url = req.params.asset;
      express.static(__dirname + '/static')(req, res, next);
    });         
    
    // Just the asset.
    app.use('/static/*', (req, res, next) => {
      req.url = path.basename(req.originalUrl);
      express.static(__dirname + '/static')(req, res, next);
    });
    

    【讨论】:

      【解决方案3】:

      Ralf,我认为您正在寻找的是“观点”。如果您希望您的网站路由“非静态”,请保持 app.use(express.static(__dirname + '/public')) 不变。

      并像这样设置视图:

      app.engine('html', cons.swig);
      app.set('view engine', 'html');
      app.set('views', __dirname + '/public/views');
      

      当然,您需要处理用户尝试获取的路线。 你需要探索:http://expressjs.com/guide.html

      我使用 Couchdb,我将向您展示它可能会有所帮助的示例。

      app.get('/:foo', function(req, res){
      if (!err){
      res.render('htmlname', {
      title: 'somedata'
      });
      }}
      

      希望对你有帮助,祝你好运

      【讨论】:

      • 谢谢,但没有意见。无论使用什么网址,都有一组静态内容可供服务。
      【解决方案4】:

      在遇到同样的问题后,我想出了以下解决方案:

      app.use('/path/:file', function (req, res, next) {
        return express.static(require('path').join('.', 'path', req.params.file)).apply(this, arguments);
      });
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-09
      • 1970-01-01
      相关资源
      最近更新 更多