2013-12-09 138 views
3

app.use documentation显示为静态路由提供静态目录的例子,例如, node js express - 如何为可变URL提供静态内容

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

什么是指定一个静态目录应担任了非静态路由的语法?

通过其他地方的语法(app.get等),它应该看起来像app.use('/:foo', express.static(__dirname + '/public'));应该工作。但是,我总是收到Cannot GET /bar错误。

+0

你失去了我,要么你有一个静态文件的目录实际上匹配浏览器正在请求的文件名,或者您已经定义了创建浏览器请求的内容的路由,您如何为非静态请求提供静态目录? – adeneo

+0

这个网站的内容有一个目录,我想为xyz.com,xyz.com/a,xyz.com/b等服务(我没有决定这个设计。) –

回答

0

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

app.get('/:location', function(req, res){ 
    res.sendfile(__dirname + '/public/index.html'); 
}); 
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' 
}); 
}} 

希望它帮助,好运

+0

谢谢,但是没有观点。无论使用何种网址,都有一组静态内容可供使用。 –

0

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

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

这只是说'return express.static('path。'+ req.params.file)''的奇特方式吗? – Assimilater

+0

https://shapeshed.com/writing-cross-platform-node/#use-path-join-to-join-folder-names – jerone

+0

我明白加入,只是没有使用apply – Assimilater