我怎样才能和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议更新您的问题,以包含更多的代码,也许是一个可运行,但最小的问题的例子。 希望这可以帮助!