如何在express.static旁边使用中间件?

时间:2014-04-16 10:53:32

标签: node.js express middleware

我有一个nodejs应用程序,通过express.static提供单页应用程序。这一切都很好,但是当我尝试创建一个简单的中间件时:

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调用之后使用中间件它可以正常工作 - 但是没有调用静态内容。我需要设置中间件,以便任何闪存消息(来自连接闪存)都可以作为cookie发送到静态内容。

有谁知道如何为所有内容使用中间件,包括静态内容?最终,我将提供两个文件夹,一个公共文件夹和一个私人文件夹(通过护照验证)。

1 个答案:

答案 0 :(得分:3)

我已经整理了一个问题的最小实现,它对我有用:

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,那么您可能偶然发现了一个已修复的错误,类似于this one。如果更新无法解决您的问题,那么我建议您更新您的问题以包含更多代码,可能是一个可运行但最小的问题示例。希望这有帮助!