node js express - 如何为变量url提供静态内容

时间:2013-12-09 08:13:28

标签: node.js static express routes

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

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

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

通过其他地方的语法(app.get等),似乎app.use('/:foo', express.static(__dirname + '/public'));应该有效。但是,我总是遇到Cannot GET /bar错误。

4 个答案:

答案 0 :(得分:0)

拉尔夫,我认为你所寻找的是“观点”。如果您希望自己的网站路由“非静态”,请按原样保留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'
});
}}

希望它有所帮助,Goodluck

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

在提出同样的问题之后,我提出了以下解决方案:

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

答案 3 :(得分:0)

如果您想保留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);
});