app.use documentation显示了为静态路由提供静态目录的示例,例如:
app.use('/static', express.static(__dirname + '/public'));
指定应为非静态路由提供静态目录的语法是什么?
通过其他地方的语法(app.get等),似乎app.use('/:foo', express.static(__dirname + '/public'));
应该有效。但是,我总是遇到Cannot GET /bar
错误。
答案 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);
});