我怎样才能和express.static一起使用中间件?

我有一个nodejs应用程序,通过express.static服务于单个页面的应用程序。 这一切工作正常,但是当我尝试创build一个简单的中间件:

app.use(function(req, res, next){ console.log('%s %s', req.method, req.url); next(); }); app.use(express.static(path.join(__dirname, 'client'))); 

从客户端加载内容的任何尝试失败:

 TypeError: Object function (req, res, next){ console.log('%s %s', req.method, req.url); next(); } has no method 'concat' 

如果在express.static调用之后使用中间件,则它工作正常 – 但不会调用静态内容。 我需要设置中间件,以便任何Flash消息(来自连接闪存)都可以作为cookie发送到静态内容。

有谁知道我可以如何使用中间件的所有内容,包括静态内容? 最后,我将服务两个文件夹,一个公共和一个私人(通过护照authentication)。

我已经把你的问题的一个最小的实现,它适用于我:

 var express = require('express') var path = require('path') var app = express() app.use(function(req, res, next) { console.log('Middleware says %s %s', req.method, req.url); next(); }) app.use(express.static(path.join(__dirname, 'client'))) app.listen(8080, function() { console.log('server is ready') }) 

然后我启动了服务器

 $ node so.js server is ready 

并在浏览器中加载http://localhost:8080/foo.txt

 Middleware says GET /foo.txt 

我正在使用Express 3.6.0 – 如果您使用的是旧版本的Express,那么您可能已经发现了一个已经修复的错误,类似于这个错误。 如果更新没有解决您的问题,那么我会build议更新您的问题,以包含更多的代码,也许是一个可运行,但最小的问题的例子。 希望这可以帮助!