Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js ExpressJS:如何忽略路由中的公共静态文件?_Node.js_Static_Match_Public_Express - Fatal编程技术网

Node.js ExpressJS:如何忽略路由中的公共静态文件?

Node.js ExpressJS:如何忽略路由中的公共静态文件?,node.js,static,match,public,express,Node.js,Static,Match,Public,Express,正在匹配我的公用目录中的文件。因此,如果我包括一个样式表: app.get("/:name?/:group?", function(req, res){... 节点将匹配/stylesheets/style.css并分配name值样式表和group值style.css 避免这种情况的最佳方法是什么?对于任何可能需要它的人,我的解决方案是使用中间件。如果有人找到更好的解决方案,请告诉我 <link type="text/css" href="/stylesheets/style.css

正在匹配我的公用目录中的文件。因此,如果我包括一个样式表:

app.get("/:name?/:group?", function(req, res){...

节点将匹配/stylesheets/style.css并分配name值样式表和group值style.css


避免这种情况的最佳方法是什么?

对于任何可能需要它的人,我的解决方案是使用中间件。如果有人找到更好的解决方案,请告诉我

<link type="text/css" href="/stylesheets/style.css" />

最简单的事情可能是确保express在路由器中间件之前运行静态提供者中间件。您可以通过执行以下操作来完成此操作:

public = ['images', 'javascripts', 'stylesheets', 'favicon.ico']

ignore = (req, res, next) ->
    if public.indexOf(req.params.name) != -1
        console.log "Ignoring static file: #{req.params.name}/#{req.params.group}"
        next('route')
    else
        next()

app.get "/:name?/:group?", ignore, (req, res) -> ...

这样静态文件将找到它并响应,路由器将不会执行。我对路由器的默认位置(上一个)也有类似的困惑,因为我编译的coffeescript文件出错了。仅供参考,这上面有文件(在页面上搜索
app.router
,你会看到一个解释性的段落。

你也可以有一个反向代理,比如为你处理静态文件。我相信很多专业的Node/Ruby on Rails设置都是这样做的。

这正是我想要的!谢谢我认为Express API已经改变了,因为这个答案是pos适用于我的语法是:app.use('/public',express.static(uu dirname+'/public'));我也不需要app.router行。@这取决于您是否希望
/public
出现在URL和/或文件系统中。通常
public
是文件系统目录的名称,但不作为URL的一部分出现。您是否需要关于
app.router
的明确行也取决于您的其他人如何er调用
app.get
,好友被排序/组织。在我使用
app.get(“/*”,function(req,res){})捕获“直接”url请求和页面重新加载等的场景中,这对我很有效,但我不希望它处理css、js、img文件的后续页面请求。我将
app.use(express.static("公众")
在它上面,catchall不再处理这些请求。@PeterLyons这在所有情况下实际上都不起作用-在生产环境中是的,这是一种方法。一般来说,您仍然希望在express中为本地开发目的设置它。一般来说,人们在本地开发期间不需要使用反向代理,但您仍然需要需要一些东西来为静态文件服务。next(“路由”)和next之间有什么区别?
app.use(express.static(__dirname + '/public'));
app.use(app.router);